C 标准重定向

C 标准重定向,c,redirect,stream,stdout,C,Redirect,Stream,Stdout,如果我对stdout流进行dup(以便以后使用),并对stdout流进行freopen,然后对文件进行printf(“数据”),则文件不会立即用数据更新。它仅在我执行fflush(stdout)后更新 fflush(stdout)是否有其他副作用 有没有更优雅的方法可以做到这一点?这是缓冲I/O中的正常行为。刷新不会发生任何奇怪的情况 但是,在这种情况下,您不应该与stdout发生冲突。用fopen打开文件,您将得到一个文件指针。在函数(如fprintf中)中使用此指针直接在其中打印,如果需要立

如果我对
stdout
流进行
dup
(以便以后使用),并对
stdout
流进行
freopen
,然后对文件进行
printf(“数据”)
,则文件不会立即用数据更新。它仅在我执行
fflush(stdout)
后更新

fflush(stdout)
是否有其他副作用


有没有更优雅的方法可以做到这一点?

这是缓冲I/O中的正常行为。刷新不会发生任何奇怪的情况


但是,在这种情况下,您不应该与stdout发生冲突。用
fopen
打开文件,您将得到一个
文件
指针。在函数(如
fprintf
中)中使用此指针直接在其中打印,如果需要立即打印结果,则刷新它。完成后,不要忘记使用
fclose
关闭文件。

您可以使用对C89
setvbuf()
的单个调用来避免代码与
fflush()
的代码混淆。或者可能是包装器
setlinebuf()


但上述所有操作都只是刷新缓冲区。您可能需要使用
fsync()。