C语言中是否有阻塞的等价物?
我知道这对C++来说是正确的:C语言中是否有阻塞的等价物?,c,C,我知道这对C++来说是正确的: buffering output cerr: unbuffered stderr clog: buffered stderr cout: buffered stdout 在C中,cerr和cout的等价物为: cerr: fprintf(stderr, ...) cout: fprintf(stdout, ...) or printf(...) clog是否有等价物?否,C只有stderr和stdou
buffering output
cerr: unbuffered stderr
clog: buffered stderr
cout: buffered stdout
在C中,cerr
和cout
的等价物为:
cerr: fprintf(stderr, ...)
cout: fprintf(stdout, ...) or printf(...)
clog是否有等价物?否,C只有stderr
和stdout
和标准输出流。但是,您可以使用setvbuf
Yes,使用setvbuf
和完全缓冲(\u IOFBF
)在stderr
上设置缓冲:
完全缓冲:在输出时,一旦缓冲区已满(或
脸红)。在输入时,当输入操作完成时,缓冲区被填充
已请求,缓冲区为空
#包括
内部主(空)
{
字符buff[BUFSIZ];
setvbuf(标准、buff、IOFBF、BUFSIZ);
fprintf(stderr,“Hello world\n”);
getchar();
fflush(stderr);
返回0;
}
在每个系统上选择BUFSIZ的值,以便进行流I/O
有效率的因此,最好使用BUFSIZ作为
调用setvbuf时使用缓冲区
<代码> CUT被缓冲,但请参阅“”,因为缓冲在C和C++中不完全相同。我不确定在stderr
中添加一个缓冲区是否是一个好主意,因为在编写实际错误时,您必须记住fflush
它,否则致命的错误将无法解决。@potatosatter谢谢,我将cout改为buffered。我永远不会用木屐来处理实际的错误,所以如果它没有刷新的话就没有问题了。这是没有意义的。C++ >代码>阻塞>代码>代码> cOUT/COD>总是缓冲,但问题是关于C<代码> STDRR < /代码>。如果你把它改为缓冲,那么你就没有C++中的无缓冲错误输出设施了。你是对的,我在考虑C++。
#include <stdio.h>
int main(void)
{
char buff[BUFSIZ];
setvbuf(stderr, buff, _IOFBF, BUFSIZ);
fprintf(stderr, "Hello world\n");
getchar();
fflush(stderr);
return 0;
}