Stdout

Stdout

码农世界 2024-05-15 前端 70 次浏览 0个评论

For output streams, fflush() forces a write of all user-space buffered data for the given output or update stream via the stream's underlying write function. 

Note that fflush() only flushes the user-space buffers provided by the C library. To ensure that the data is physically stored on disk the kernel buffers must be flushed too, for example, with sync(2) or fsync(2).

Normally all files are block buffered. When the first I/O operation occurs on a file, malloc(3) is called, and a buffer is obtained.

Golang  os/file/ 写文件是直接调用系统库函数write(),把内容写入到文件。当然,不一定是到disk,需要调用fsync()。

write()调用的成本是很高的,需要数千个CPU周期。

C语言里stdout是FILE结构,是对内核文件描述符的封装(增加了用户空间的buffer,line-buffer/block-buffer是指的用户空间的buffer)。但是Golang里的stdout虽然也是标准的File类型,但是没有buffer。

之所以在用户空间增加buffer是为了减少write()的调用。

glibc则提供了许多系统调用的封装。这使我们在编写程序的时候,并不需要直接和内核进行交互,而是借用glibc这层封装,更加安全、稳定地使用。

转载请注明来自码农世界,本文标题:《Stdout》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,70人围观)参与讨论

还没有评论,来说两句吧...

Top