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

       最后, 贴出结果, 嘻嘻

      

  • 相关阅读:
    Linux Apache服务(一)
    mysql基础
    linux面试题一
    linux shell(2)
    linux基础汇总2
    python列表生成式、生成器,迭代器与二分法
    python的函数
    python函数
    java 翁老师学习笔记-持续更
    责任链模式
  • 原文地址:https://www.cnblogs.com/the-one/p/5009518.html
Copyright © 2011-2022 走看看