时间:2021-05-19
先看下面一个例子
a.c :
复制代码 代码如下:
int main(int argc, char *argv[])
{
fprintf(stdout, "normal\n");
fprintf(stderr, "bad\n");
return 0;
}
$ ./a
normal
bad
$ ./a > tmp 2>&1
$ cat tmp
bad
tmp
我们看到, 重定向到一个文件后, bad 到了 normal 的前面.
原因如下:
复制代码 代码如下:
"The stream stderr is unbuffered. The stream stdout is line-buffered when it points to a
terminal. Partial lines will not appear until fflush(3) or exit(3) is called, or a newline
is printed. This can produce unexpected results, especially with debugging output. The
buffering mode of the standard streams (or any other stream) can be changed using the
setbuf(3) or setvbuf(3) call. "
因此, 可以使用如下的代码:
复制代码 代码如下:
int main(int argc, char *argv[])
{
fprintf(stdout, " normal\n");
fflush(stdout);
fprintf(stderr, " bad\n");
return 0;
}
这样重定向到一个文件后就正常了. 但是这种方法只适用于少量的输出, 全局的设置方法还需要用 setbuf() 或 setvbuf(), 或者采用下面的系统调用:
复制代码 代码如下:
int main(int argc, char *argv[])
{
write(1, "normal\n", strlen("normal\n"));
write(2, "bad\n", strlen("bad\n"));
return 0;
}
但是尽量不要同时使用 文件流 和 文件描述符,
复制代码 代码如下:
"Note that mixing use of FILEs and raw file descriptors can produce unexpected results and
should generally be avoided. A general rule is that file
descriptors are handled in the kernel, while stdio is just a library. This means for exam-
ple, that after an exec(), the child inherits all open file descriptors, but all old
streams have become inaccessible."
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在网站的开发和制作中,我们经常忽略一些细节。有些问题虽然看着并不重要,但实际不容忽视。今天我们将提供一些苏州网站制作设计中经常容易被忽略的一些细节问题。 一、
一.背景在Python中,文件对象sys.stdin、sys.stdout和sys.stderr分别对应解释器的标准输入、标准输出和标准出错流。在程序启动时,这
网站建设并不是随便用一些代码加一些图片就可以完成的,在网站建设的过程中,有很多比较容易被忽视但又非常重要的细节问题。下面,建站就带大家一起来了解这些小细节。1、
网站制作中容易往往因为一些小细节没有处理好,从而导致用户体验度大大折扣。对此小编总结了一下三点容易被忽视的细节,仅供大家参考。 一、各个页面间的衔接问题
做网站建设的都知道,网页设计是建设网站的重点,而一些新建的网站容易忽视网页设计中的一些细节,导致网站传递信息不全而致使网站影响力差。要怎样才能设计出优秀的网页,