Linux 核心编程 – fsync, write
浏览:2654次 出处信息
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的同步,异步,阻塞,非阻塞 (阅读:14660)
- Linux下访问文件的基本模式 (阅读:3293)
- MySQL在切换binlog时会阻塞更新 (阅读:3109)
- 总结一下遇到过的网络同步IO导致服务阻塞的问题 (阅读:2858)
- 用insert delayed减少阻塞时间 (阅读:2916)
- write(2)在磁盘满的时候的行为 (阅读:1621)
- PHP非阻塞实现方法 (阅读:1690)
- 说说最近Google:safebrowsing引发页面加载阻塞的问题 (阅读:1392)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:一个状态模式的小改进
后一篇:一个状态模式的小改进 >>
文章信息
- 作者:ideawu 来源: idea's blog
- 标签: fsync write 阻塞
- 发布时间:2012-03-25 20:52:33
建议继续学习
近3天十大热文
-
[77] memory prefetch浅析
-
[51] find命令的一点注意事项
-
[37] 基本排序算法的PHP实现
-
[33] 卡诺模型―设计品质与设计价值的思考
-
[32] Oracle bbed工具的编译
-
[26] 程序员技术练级攻略
-
[26] 8大实用又重要Mac使用技巧
-
[25] 两行 JavaScript 代码
-
[24] 读书笔记-壹百度:百度十年千倍的29条法则
-
[21] 小屏幕移动设备网页设计注意事项