0
我寫了一個程序,它打開一個文件並反覆創建一個將文件內容打印到標準輸出的子進程。 如果我在後臺運行此程序並更改文件的內容,將打印新內容。 但是,如果我刪除文件的讀取權限或刪除文件,程序將不會更改其行爲。 我不明白爲什麼會發生這種情況。打開文件和文件更新
這是代碼:
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
在循環的每次迭代中,您都會尋找文件的開頭並讀到最後,這樣文件中的任何內容都會被打印出來。爲什麼這種行爲讓你感到驚訝? –