[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 12/25 17:52 / Filesize : 218 KB / Number-of Response : 981
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Linuxプログラミング



748 名前:login:Penguin mailto:sage [2008/04/18(金) 04:34:40 ID:fBS7BtR5]
ログ出力の際にファイルロックが必要かどうか実験していたのですが、
ちょっと不思議な現象に出くわしました。
以下のプログラムを100プロセス同時に実行すると、hoge.logの一部で「wwritten」と
なってしまう箇所があります。
fprintfでなくwrite(2)を使うと再現しないのでglibc(2.6.1)のせいだと思うのですが、
これはどういう原理なのでしょうか?
#include <sys/file.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
int i;
FILE* fp = NULL;
int fd;
int pid = getpid();
fp = fopen("hoge.log", "a");
if (!fp) {
exit(1);
}
fd = fileno(fp);
for (i=0; i<10000; i++) {
flock(fd, LOCK_EX);
fprintf(fp, "written by pid %d\n", pid);
flock(fd, LOCK_UN);
usleep(1000);
}
fclose(fp);
return 0;
}






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<218KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef