终端上不打印单个字符

我有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);