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
在循环的每次迭代中,您都会寻找文件的开头并读到最后,这样文件中的任何内容都会被打印出来。为什么这种行为让你感到惊讶? –