file 2>&1 ....">

当前位置:  技术问答>linux和unix

关于stderr与stdout的重定向问题

    来源: 互联网  发布时间:2017-03-11

    本文导语:    1 #include   2 int main(void)   3 {   4     fprintf(stdout, "111n");   5     fprintf(stderr, "aaan");   6    7     return 0;   8 } 这样的代码在重定向的时候用./a.out >file 2>&1  为什么文件file中总是先显示aaa?是...

  1 #include
  2 int main(void)
  3 {
  4     fprintf(stdout, "111n");
  5     fprintf(stderr, "aaan");
  6 
  7     return 0;
  8 }



这样的代码在重定向的时候用./a.out >file 2>&1  为什么文件file中总是先显示aaa?是跟优先级有关系么?

|
要解释的话只能按照fdl19981所说的来理解了。

我本以为shell只是fork,open,dup2将1和2重定向,exec的子进程是对fd到底指向什么设备不关心的,看样glibc还是会判断一下0和1关联的设备来决定FILE *stdout/*stderr的缓冲方式。

|
是因为stderr是立即刷新缓冲的原因, 你在两句fprintf中加一句  fflush(stdout); 就明白了

|
重定义到文件后,,标准输出就变成全缓冲(而不是行缓冲)
所以即使后面有个"n"换行符,stdout也不会刷新缓冲,得等到缓冲区满(一般8192B)才会实际写入
或者调用fflush(stdout)强制刷新缓存,使其写入

而stderr不管怎么样重定向,都是无缓存,向其输入数据后,马上实际写入。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于 stderr ?
  • 菜鸟问,打印到stderr的信息给谁看的?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3