例如puts()
调用系统调用write()
。这是否意味着它write()
每次调用时都会调用puts()
,还是在调用之前将 puts 累积到某个缓冲区中write()
?
问问题
714 次
2 回答
3
stdio 函数确实利用了缓冲。在特定情况下puts()
,它总是将完整的行写入stdout
,如果stdout
连接到终端,则通常会被行缓冲,因此每次调用puts()
都会导致调用write()
。
但是,stdout
可以完全缓冲 - 使用setvbuf()
(只要在对 的任何其他操作之前完成stdout
),或者更常见的是通过运行stdout
附加到管道或文件的程序。在这种情况下,每次调用puts()
都不一定会导致调用write()
.
于 2013-03-02T04:07:14.293 回答
2
你是对的——通常 CFILE*
流确实有存储数据的缓冲区。只有当缓冲区已满、流关闭或被fflush
调用时,它们才会进行 Unix I/O 系统调用。您可以使用 C 标准函数控制流的缓冲setvbuf
。
于 2013-03-02T03:54:44.413 回答