将标准输出和标准错误重定向到同一文件并恢复它



我将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));

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

相关内容

  • 没有找到相关文章

最新更新