zoukankan      html  css  js  c++  java
  • 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( "错误列表:
    ", output1 );
    for( i = 1; i <= 42; i ++ ){
           errno = i;
           perror( "ERROR" );
    }

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

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

    setvbuf( output1, buffer, _IONBF, BUFSIZ );

       这样,问题就解决了。

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

       最后, 贴出结果, 嘻嘻

      

  • 相关阅读:
    js原型链
    js的__proto__,prototype、constructor属性
    百度ife2015-小白的弯路2
    百度ife2015-小白的弯路1
    Visaul Studio 密钥
    pycharm常用的一些快捷键
    python3练习题--字符串
    字符串相关方法
    python3 基本数据类型
    在python中缩进的重要性
  • 原文地址:https://www.cnblogs.com/the-one/p/5009518.html
Copyright © 2011-2022 走看看