今天我了解到,当stdout设置为终端并在不同情况下进行缓冲时,它是行缓冲的.因此,在正常情况下,如果我使用printf()而不使用终止'\n',则仅当缓冲区已满时才会在屏幕上打印.如何获得这个缓冲区的大小,这有多大?
Joh*_*ode 11
实际大小由个人实施定义; 该标准没有规定最小尺寸(基于我能够找到的,无论如何).不知道如何确定缓冲区的大小.
编辑
章和节:
7.19.3文件
...
3当流未缓冲时,字符应尽快从源或目的地出现.否则,可以将字符作为块累积并发送到主机环境或从主机环境发送.当流被完全缓冲时,当填充缓冲区时,字符意图作为块传输到主机环境或从主机环境传输.当流被行缓冲时,当遇到换行符时,字符将作为块传输到主机环境或从主机环境传输.此外,当填充缓冲区,在无缓冲流上请求输入时,或者在需要从主机环境传输字符的行缓冲流上请求输入时,字符旨在作为块传输到主机环境. .对这些特性的支持是实现定义的,并且可能通过setbuf和setvbuf功能受到影响.
强调补充说.
"实现定义"不是"我不知道"的委婉说法,它只是一种声明,语言标准明确地将其留给实现来定义行为.
而且话说回来,还有就是找出一个非编程的方式; 请参阅编译器的文档."实现定义"也意味着实现必须记录行为:
3.4.1
1 实现定义的行为未
指定行为,其中每个实现记录了如何进行选择
2示例实现定义行为的示例是当有符号整数向右移位时高阶位的传播.
| 归档时间: |
|
| 查看次数: |
13696 次 |
| 最近记录: |