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

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

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 );  意思是立即写入缓冲区的内容。

 

   最后, 贴出结果, 嘻嘻

  

 

posted @ 2015-12-01 11:14  心中的阿哲  阅读(870)  评论(0编辑  收藏  举报