Linux - 禁用缓冲I / O以在子进程中归档

时间:2011-10-17 23:53:51

标签: linux buffering

在我的应用程序中,我创建了一堆子进程。在fork()之后,我打开一个进程文件,将创建进程的stdout / stderr设置为指向该文件,然后执行预期的程序。

父进程是否有一个选项可以设置这样的方式:当子进程执行printf时,它会立即刷新到输出文件而不必调用flush()?或者是否可以从子进程本身(在exec之前)调用API以禁用缓冲的I / O?

1 个答案:

答案 0 :(得分:0)

这里的问题是printf被缓冲了。底层文件描述符不以这种方式缓冲(它们在内核中缓冲,但另一端可以从相同的内核缓冲区读取)。您可以使用setvbuf更改缓冲,如评论中所述,这应该是一个答案。

setvbuf(stdout, NULL, _IONBF, 0);

您无需为stdinstderr执行此操作。

您无法从父进程执行此操作。这是因为缓冲区是由子进程创建的。父进程只能操作底层文件描述符(在内核中),而不是stdout(它是C库的一部分)。

P.S。您的意思是fflush,而不是flush