码迷,mamicode.com
首页 > 其他好文 > 详细

stdout( 标准输出流)和 stderr( 标准输入流) 重定向问题

时间:2015-12-01 12:28:11      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

  我想把提示信息和错误信息列表都写入到同一个文件里,

1 /*
2 ** 设置流, 使输出与错误流都指向指定的文件
3 */
4 if( (output1 = freopen( PATH, "a", stdout ) ) == NULL )
5     exit( EXIT_FAILURE );
6     
7 if( (output2 = freopen( PATH, "a", stderr ) ) == NULL )
8     exit( EXIT_FAILURE );

 

   开始, 我这么写

fputs( "错误列表:\n", output1 );
for( i = 1; i <= 42; i ++ ){
       errno = i;
       perror( "ERROR" );
}

    结果, 文件中的内容是 错误信息列表在前面, 提示信息在结尾处。

    我百度了下, 发现stdout流的缓冲方式是完全缓冲,stderr是不缓冲, 完全缓冲是指等缓冲区满了后写入, 所以我用setvbuf改变了stdout的缓冲方式( 还要声明一个足够大的数组buffer), 改成不缓冲, 即在这段代码前添加一句

setvbuf( output1, buffer, _IONBF, BUFSIZ );

   这样,问题就解决了。

   还有一种办法, 就是在fputs后加一句   fflush( output1 );  意思是立即写入缓冲区的内容。

 

   最后, 贴出结果, 嘻嘻

   技术分享

 

stdout( 标准输出流)和 stderr( 标准输入流) 重定向问题

标签:

原文地址:http://www.cnblogs.com/the-one/p/5009518.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!