Linux のファイルに関する本を読んだところ、次の例が示されています。
int main(char ** argv, int argc) {
int stat;
int fd = open("dugma1.txt", O_WRONLY, 0666);
if (fork() == 0) {
int fd2 = open("dugma1.txt", O_WRONLY, 0666);
sleep(10);
if (lockf(fd2, F_TLOCK, 17) >= 0) {
write(fd2, "I was here second", 17);
}
} //if
else {
lockf(fd, F_TLOCK, 16);
write(fd, "I was here first", 16);
wait(&stat);
}
}
出力が次のようになると書かれています: I was here first
、理由: ファイルを閉じません。しかし、私はこの説明を理解していませんでした。最初に : を書きますが、その後でコードのこの部分に行かないI was here first
理由は次のとおりです。sleep(10)
if (lockf(fd2, F_TLOCK, 17) >= 0) {
write(fd2, "I was here second", 17);
}
F_TLOCK
はノンブロッキングであり、そのために「I was here second」と書くことに成功します。
ありがとう