【问题标题】:C: perror, stdout output orderC:perror,stdout输出顺序
【发布时间】:2012-01-07 23:27:43
【问题描述】:

代码

printf("Doing functionname... ");
if (functionname(args) == -1)
{
    perror("functionname");
}
else
{
    printf("ok\n");
}

预期行为

正在做函数名...好的

正在执行函数名...函数名:错误等等

实际行为

但是 stderrstdout 是不同的输出流,所以结果看起来像这样,

函数名:错误等等

正在做函数名...

有哪些可能的解决方法?

【问题讨论】:

    标签: c stdout stderr


    【解决方案1】:

    刷新输出流。 stdout,默认是行缓冲的;所以只有当它看到一个'\n'(或者当缓冲区被填满时),输出才会被有效地写入。相比之下,stderr 默认不缓冲,所以每个字符都会立即输出。

    printf("blah blah blah");
    fflush(stdout);
    

    如果您以 '\n' 终止字符串,则流将被刷新,而无需特定的 fflush 语句。

    printf("blah blah blah\n"); /* stream flushed */
    

    或者,将您的信息内容打印到stderr

    fprintf(stderr, "Doing functioname...");
    

    这样做的好处是用户可以将所有信息消息重定向到/dev/null

    【讨论】:

      【解决方案2】:

      你可以使用:

      printf("%s\n", strerror(errno));
      

      确保没有干预库调用(或保存errno,如果有的话)。

      strerror<string.h> 中。

      【讨论】:

        猜你喜欢
        • 2016-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多