关于write()
关于linux系统调用write()
调用一次write()完毕,是不是已经写到磁盘上了?
是不是调用一次write(),就是一次写请求,不管写多少个字符进去,调用完都已经通过缓冲区写到磁盘上了?
那么fsync()这个函数是不是指将缓冲区的写到磁盘上,如果是,write完再fsync是不是多此一举?
我想实现的是可以先创建一个文件,然后写一些东西到该文件的缓冲区,再调用fsync()写入磁盘,请问如何实现?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
write() 只是没有用户空间的缓冲(就像 stdio 提供的), 但是它仍然有内核中的缓冲.
分不清楚 fflush() 和 fsync() 就说明还没有用户空间和内核空间的概念. 建议系统的学习/补习一下.
write()也有缓冲吗?我以为没有呢,会直接写到磁盘
fflush 是把 FILE * 里的缓冲区(位于用户态进程空间)刷新到内核中
fsync 是把内核中对应的缓冲(是在 vfs 层的缓冲)刷新到硬盘中
一个是文件流, 一个是文件描述符. 他们之间是可以相互转换的.
man fdopen 将文件描述符转换成流
man fileno 讲流转换成文件描述符
fflush()也有这个功能,但它里面的参数是文件句柄,
同
fsycn()有什么区别吗?
不是.只是修改了缓冲区.操作系统定期刷新缓冲区的内容到磁盘上.如果想及时更新磁盘上的数据有必要使用fsync()