Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中是否有阻塞的等价物?_C - Fatal编程技术网

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

我知道这对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
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;
}