Linux磁盘操作三部曲

说明

程序运行过程中免不了对磁盘的读写操作,我想大部分有经验的开发人员都知道相对于内存的操作速度,磁盘的读写速度实在是不够看。所以为了解决这个问题,实际上我们在调用一般的I/O操作接口时,我们并没有马上对磁盘进行读写操作。这里面有四个有代表性的函数write、fflush、sync、fsync。

write

一般情况下我们写文件都是调用write接口。那么write接口真正做了什么事情呢?它有真的把数据写到磁盘吗?write实际上是将数据拷贝到了用户的缓冲区中然后就返回了,显然数据此时并没有写到磁盘上。一个有趣的事情是如果这个时候你的应用程序崩溃了,那么这个数据将永远不会被写入磁盘。

fflush

刚刚说到write有个缺陷是程序崩溃的时候,你刚刚write的数据会丢失。怎么解决这个问题?fflush此时就登场了。fflush的作用是将用户缓冲区的数据写入到内核缓冲区中,这个时候实际上数据仍然没有写入到磁盘。但是这个时候你程序崩溃不会再影响数据后面刷新到磁盘了。

fsync

上面说到fflush只是将数据拷贝到内核缓冲区中,没有真正写入磁盘。那么什么命令可以直接将数据写入磁盘呢?那就是fsync。fsync会将内核缓冲区的数据写入到磁盘然后再返回。

sync

sync和fsync类似,都是将数据写入到磁盘。区别是fsync是阻塞式操作,一直到磁盘写入完成才会返回,而sync是异步操作,它不等待写入完成就返回了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值