C:perror,stdout输出顺序

时间:2012-01-07 23:27:44

标签: c stdout stderr

代码

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

预期行为

  

执行functionname ... ok

OR

  

执行functionname ... functionname:错误等等等等。

实际行为

然而 stderr stdout 是不同的输出流,因此结果如下所示,

  

functionname:error blah blah

     

执行functionname ...

有哪些可行的解决方法?

2 个答案:

答案 0 :(得分:3)

您可以使用:

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

确保没有介入的库调用(如果存在,则保存errno

strerror位于<string.h>

答案 1 :(得分:2)

刷新输出流。默认情况下,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