终端上不打印单个字符
我有3个不同的进程,使用printf
打印出单个字符。 但我在终端看不到它们。 当我添加换行符printf("\n H")
以便每个字符都在一个新行上时,我可以看到它们。 如果没有换行符,为什么它不起作用?
这是一个潮红的问题。 如果在每次printf
之后刷新缓冲区,则应该使输出更接近您想要的输出。 要刷新标准输出,只需执行fflush( stdout )
。
C标准为输出流定义了3种类型的缓冲:
- 无缓冲→没有缓冲完成
- 行缓冲→缓冲,直到看到换行符
- 完全缓冲→缓冲到缓冲区大小
可以通过setvbuf(3)
和setbuf(3)
函数更改输出流的缓冲类型。
C标准要求stderr
在启动时不能完全缓冲(在许多实现中通常没有缓冲,以便尽快看到错误); 并且stdout
只有在可以确定不引用终端时才被完全缓冲(当它引用终端时,许多实现将其初始化为行缓冲,这就是你所看到的)。
use’write(1,&c,1)’系统调用,或
fprintf(stderr,'%c', c);