有关为什么/何时使用printf而不是打印到屏幕进行缓冲的示例?

时间:2018-08-08 18:38:16

标签: c

我注意到printf仅在屏幕上打印...

  • 有换行符时
  • 当有scanf时

帮助我了解此行为。我认为printf写入stdout,并且内核正在刷新到屏幕或显示驱动程序。我的理解正确吗?

2 个答案:

答案 0 :(得分:3)

7.21.3文件
...
3当流 unbuffered 时,字符应显示在源中或在 尽快到达目的地。否则可能会累积字符,并且 传输到主机环境或从主机环境传输。当流完全缓冲时, 打算将字符作为块与主机环境进行来回传输 缓冲区已满。 当流行缓冲时,字符应为 当换行符是 。此外,还打算将字符作为一个块传输到主机。 缓冲区已满,在未缓冲的流上请求输入时的环境,或 当在需要传输以下内容的行缓冲流上请求输入时 主机环境中的字符。对这些特征的支持是 实现定义的,可能会受 setbuf setvbuf 函数的影响。
...
7在程序启动时,预定义了三个文本流,无需显式打开 — 标准输入(用于读取常规输入),标准输出(用于写入 常规输出)和标准错误(用于写入诊断输出)。如最初 打开时,标准错误流未完全缓冲;标准输入和标准 当且仅当可以确定该流不引用时,输出流才被完全缓冲 到交互式设备。

C 2011 online draft

在大多数交互式环境中,标准输入和标准输出是行缓冲的。因此,是的,输出将被缓冲,直到看到换行符为止,或者输出操作之后立即进行输入操作(或调用fflush)。

答案 1 :(得分:0)

您是正确的。函数printf()将格式化的输出发送到stdout。

int printf(const char *format, ...);

引用another post

  

printf()语句将输出发送到称为   缓冲。缓冲区中的资料不时地发送到   屏幕。何时从缓冲区发送输出的标准C规则   屏幕上很清楚:

     
      
  1. 当缓冲区已满时发送。
  2.   
  3. 遇到换行符时。
  4.   
  5. 当有即将到来的输入时。
  6.