我注意到printf
仅在屏幕上打印...
帮助我了解此行为。我认为printf
写入stdout
,并且内核正在刷新到屏幕或显示驱动程序。我的理解正确吗?
答案 0 :(得分:3)
7.21.3文件
...
3当流 unbuffered 时,字符应显示在源中或在 尽快到达目的地。否则可能会累积字符,并且 传输到主机环境或从主机环境传输。当流完全缓冲时, 打算将字符作为块与主机环境进行来回传输 缓冲区已满。 当流行缓冲时,字符应为 当换行符是 。此外,还打算将字符作为一个块传输到主机。 缓冲区已满,在未缓冲的流上请求输入时的环境,或 当在需要传输以下内容的行缓冲流上请求输入时 主机环境中的字符。对这些特征的支持是 实现定义的,可能会受setbuf
和setvbuf
函数的影响。
...
7在程序启动时,预定义了三个文本流,无需显式打开 — 标准输入(用于读取常规输入),标准输出(用于写入 常规输出)和标准错误(用于写入诊断输出)。如最初 打开时,标准错误流未完全缓冲;标准输入和标准 当且仅当可以确定该流不引用时,输出流才被完全缓冲 到交互式设备。
在大多数交互式环境中,标准输入和标准输出是行缓冲的。因此,是的,输出将被缓冲,直到看到换行符为止,或者输出操作之后立即进行输入操作(或调用fflush
)。
答案 1 :(得分:0)
您是正确的。函数printf()
将格式化的输出发送到stdout。
int printf(const char *format, ...);
引用another post:
printf()
语句将输出发送到称为 缓冲。缓冲区中的资料不时地发送到 屏幕。何时从缓冲区发送输出的标准C规则 屏幕上很清楚:
- 当缓冲区已满时发送。
- 遇到换行符时。
- 当有即将到来的输入时。