私はファイルを開き、そのファイルの内容を標準出力に出力する子プロセスを繰り返し作成するプログラムを作成しました。 このプログラムをバックグラウンドで実行してファイルの内容を変更すると、新しい内容が印刷されます。 ただし、ファイルの読み取り権限を削除したり、ファイルを削除してもプログラムの動作は変更されません。 これがなぜ起こるのか分かりません。ファイルとファイルの更新を開く
これはコードです:
ファイルを開いたときにファイルのアクセス権のみがチェックされます。
fd = open(argv[1], O_RDONLY);
if (fd == -1) {
perror("catloop: open");
return EXIT_FAILURE;
}
while (1) {
pid = fork();
if (pid == -1) {
perror("catloop: fork");
(void) close(fd);
return EXIT_FAILURE;
}
if (pid == 0) {
char c;
(void) lseek(fd, 0, SEEK_SET);
while (read(fd, &c, 1) == 1) {
write(STDOUT_FILENO, &c, 1);
}
(void) close(fd);
return EXIT_SUCCESS;
}
(void) waitpid(pid, NULL, 0);
sleep(1);
}
(void) close(fd);
は
なぜファイルの内容を追加すると、新しい内容が印刷されるのですか? – user3142443
ループの繰り返しごとに、ファイルの先頭に移動して最後まで読み取ります。そのため、ファイル内の内容がすべて印刷されます。なぜあなたの行動はあなたを驚かせるでしょうか? –