关于write()

发布于 2022-07-17 19:14:36 字数 230 浏览 7 评论 6

关于linux系统调用write()
调用一次write()完毕,是不是已经写到磁盘上了?
是不是调用一次write(),就是一次写请求,不管写多少个字符进去,调用完都已经通过缓冲区写到磁盘上了?
那么fsync()这个函数是不是指将缓冲区的写到磁盘上,如果是,write完再fsync是不是多此一举?
我想实现的是可以先创建一个文件,然后写一些东西到该文件的缓冲区,再调用fsync()写入磁盘,请问如何实现?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

同尘 2022-07-21 22:33:32

write() 只是没有用户空间的缓冲(就像 stdio 提供的), 但是它仍然有内核中的缓冲.

分不清楚 fflush() 和 fsync() 就说明还没有用户空间和内核空间的概念. 建议系统的学习/补习一下.

总攻大人 2022-07-21 18:02:51

write()也有缓冲吗?我以为没有呢,会直接写到磁盘

何止钟意 2022-07-21 15:34:04

fflush 是把 FILE * 里的缓冲区(位于用户态进程空间)刷新到内核中
fsync 是把内核中对应的缓冲(是在 vfs 层的缓冲)刷新到硬盘中

音盲 2022-07-21 15:29:32

一个是文件流, 一个是文件描述符. 他们之间是可以相互转换的.
man fdopen 将文件描述符转换成流
man fileno 讲流转换成文件描述符

甜心 2022-07-20 18:20:10

fflush()也有这个功能,但它里面的参数是文件句柄,

fsycn()有什么区别吗?

陌上芳菲 2022-07-20 05:09:34

不是.只是修改了缓冲区.操作系统定期刷新缓冲区的内容到磁盘上.如果想及时更新磁盘上的数据有必要使用fsync()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文