将stdout和stderr重定向到同一文件并将其还原

unl*_*101 16 c redirect stdout stderr output

我将我的c程序的stderr和stdout的输出重定向到两个文件,然后恢复原始的stdout和stderr:

int sout = dup(fileno(stdout));
freopen("test.txt","w",stdout);

int serr = dup(fileno(stderr));
freopen("test.txt","a",stderr);

//some output....

dup2(sout,fileno(stdout));
close(sout);

dup2(serr,fileno(stderr));
close(serr);
Run Code Online (Sandbox Code Playgroud)

这就是代码示例.这有效.

但是我想将stdout和stderr重定向到同一个文件(以后再恢复它),以便输出按照与不重定向stderr和stdout时在控制台输出上排序的顺序相同的顺序排序.我怎样才能做到这一点?

jop*_*jop 15

而不是再次打开文件stderr,如:

freopen("test.txt","a",stderr);
Run Code Online (Sandbox Code Playgroud)

stdout通过执行以下操作将其重定向到文件描述符级别:

dup2(fileno(stdout), fileno(stderr));
Run Code Online (Sandbox Code Playgroud)

请注意,stdout并且stderr仍将使用独立的用户级缓冲区,并且当不指向交互式终端时,刷新规则是不同的.这很可能是重定向时输出顺序不同的主要原因.请参阅刷新模式的说明和手册页setvbuf().