glibc setvbuf(http://man7.org/linux/man-pages/man3/setvbuf.3p.html)的文档声明:
setvbuf()函数可以在指向的流之后使用 stream与打开的文件相关联,但在任何其他操作之前 (除了对setvbuf()的不成功调用之外)执行 流。
有这个限制有什么意义? (but before any other operation...
)
为什么不能首先写入文件然后再调用setvbuf()
?
答案 0 :(得分:1)
我怀疑这个限制是从Unix操作系统中完全取消的。参考ANSI C的基本原理:
4.9.5.6
UNIX系统V已采用setvbuf
函数
setvbuf
来控制 流缓冲的性质和指定I / O缓冲区的大小。
特定实现可以以非便携式扩展的形式为UB提供有用的机制。对输出流来说更容易,可能只是刷新,但对输入流来说却不那么简单。
没有水晶球,我想重新打开文件并设置缓冲区更容易,而不是考虑重新缓冲所涉及的每个边缘情况。