我将c程序的标准输出和标准输出重定向到两个文件,然后恢复原始标准输出和标准输出:
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);
这就是代码示例。这个作品。
但是我想将标准输出和标准输出重定向到同一个文件(稍后再恢复它),以便在不重定向标准输出和标准输出时,输出以与在控制台输出上排序的顺序相同的顺序排序。我该怎么做呢?
不为stderr
重新打开文件,如:
freopen("test.txt","a",stderr);
在文件描述符级别将其重定向到stdout
:
dup2(fileno(stdout), fileno(stderr));
注意,stdout
和stderr
仍将使用独立的用户级缓冲区,并且,当不指向交互式终端时,刷新规则是不同的。这很可能是重定向时产生不同输出顺序的主要原因。请参阅setvbuf()
的刷新模式说明和手册页。