Linux 核心编程 – fsync, write
浏览:2659次 出处信息
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的同步,异步,阻塞,非阻塞 (阅读:14662)
- Linux下访问文件的基本模式 (阅读:3299)
- MySQL在切换binlog时会阻塞更新 (阅读:3111)
- 总结一下遇到过的网络同步IO导致服务阻塞的问题 (阅读:2860)
- 用insert delayed减少阻塞时间 (阅读:2919)
- write(2)在磁盘满的时候的行为 (阅读:1621)
- PHP非阻塞实现方法 (阅读:1693)
- 说说最近Google:safebrowsing引发页面加载阻塞的问题 (阅读:1399)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:一个状态模式的小改进
后一篇:一个状态模式的小改进 >>
文章信息
- 作者:ideawu 来源: idea's blog
- 标签: fsync write 阻塞
- 发布时间:2012-03-25 20:52:33
建议继续学习
近3天十大热文
-
[82] memory prefetch浅析
-
[55] 转载:cassandra读写性能原理分析
-
[52] 深入浅出cassandra 4 数据一致性问
-
[50] 基本排序算法的PHP实现
-
[46] 字符引用和空白字符
-
[42] Inline Form Labels
-
[41] MySQL半同步存在的问题
-
[41] 获取Dom元素的X/Y坐标
-
[41] JS中如何判断字符串类型的数字
-
[40] javascript插入样式