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

       最后, 贴出结果, 嘻嘻

      

  • 相关阅读:
    安卓adb
    图数据库学习
    分布式架构演进
    多活架构
    异地多活
    分布式CRDT
    技术架构的战略和战术原则
    分布式金融架构课笔记
    使用jackson进行json序列化时进行敏感字段脱敏(加密)或者忽略
    读书笔记《演进式架构》
  • 原文地址:https://www.cnblogs.com/the-one/p/5009518.html
Copyright © 2011-2022 走看看