Linux 核心编程 – fsync, write
浏览:2502次 出处信息
write
ssize_t write(int fd, const void *buf, size_t count);
将数据写到文件中. 注意, 如果文件是保存在硬盘中, write() 函数调用返回之后, 并不表示数据已经写入到硬盘中, 这时如果掉电, 数据可能会丢失.
fsync
int fsync(int fd);
程序调用本函数, 通知内核把数据写到硬盘(file)中. 比如, 你开发一个数据库软件, 就需要这样的函数, 否则掉电或者系统崩溃时便会丢失数据.
如果你的程序不调用 fsync(), Linux 内核也会自动在”合适”的时候将你的数据真正写入到硬盘(类似调用 fsync), 最长的延时默认是 30 秒.
阻塞
阻塞是 IO 的精华所在, 不管是文件 IO 还是网络 IO, 只有真正了理解了 IO 阻塞, 才能做出所谓在高并发高性能软件(服务器).
当 fsync() 和 write() 同一个 fd 时, write() 必然阻塞. 当系统 IO 非常繁忙时, fsync() 可能会阻塞, 即使系统 IO 不繁忙, fsync() 也会因为数据量大而慢.
注: 许多 Linux 系统函数如 read(), write() 等, 粗看起来很简单, 也很容易用. 正如所有的事情一样, 要做到精致肯定不简单. 当你脱离初级的学习阶段, 要写真正生产环境的软件时, 这些”简单”的函数就大有门道了. 你需要不断的阅读它们的手册, 了解每一个参数, 每一个返回值, 同时还要阅读和试验在各种条件和环境下这些函数的表现, 这样, 才有可能做出真正的软件.
建议继续学习:
- 关于IO的同步,异步,阻塞,非阻塞 (阅读:14481)
- Linux下访问文件的基本模式 (阅读:3092)
- MySQL在切换binlog时会阻塞更新 (阅读:2962)
- 总结一下遇到过的网络同步IO导致服务阻塞的问题 (阅读:2718)
- 用insert delayed减少阻塞时间 (阅读:2722)
- write(2)在磁盘满的时候的行为 (阅读:1503)
- PHP非阻塞实现方法 (阅读:1345)
- 说说最近Google:safebrowsing引发页面加载阻塞的问题 (阅读:1161)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:一个状态模式的小改进
后一篇:一个状态模式的小改进 >>
文章信息
- 作者:ideawu 来源: idea's blog
- 标签: fsync write 阻塞
- 发布时间:2012-03-25 20:52:33
建议继续学习
近3天十大热文
- [55] Oracle MTS模式下 进程地址与会话信
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 如何拿下简短的域名
- [53] 图书馆的世界纪录
- [53] android 开发入门
- [52] Go Reflect 性能
- [49] 【社会化设计】自我(self)部分――欢迎区
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [38] 程序员技术练级攻略
- [32] 视觉调整-设计师 vs. 逻辑