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().