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 ...
有哪些可行的解决方法?
答案 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