unlink,fsync和重命名是唯一按定义原子的吗?
编辑:原子意味着操作成功并具有效果或失败并且无效;操作必须不会失败并产生影响.
很明显,如果内核发生混乱,程序无法处理操作失败的错误,但在这种情况下必须考虑它确实失败了
解决方法
我不确定fsync(2)是原子的;如果一个文件在缓冲区缓存中有100兆字节脏,那么将该数据写出来需要几秒钟,并且在传输到磁盘的过程中内核可能会崩溃.也许板载的DMA引擎只能处理4兆字节的写入.也许没有DMA支持,cpu必须通过512字节块调度每次写入.
“原子”是什么意思?
mkdir可能是’原子’,要么磁盘上存在目录并且链接到父目录,要么目录数据结构尚未链接到父目录,因此无法访问 – >不存在.
mount(2)也是如此:很难找到mount(2)中途完成,如果失败,整个挂载失败:文件系统是挂载的,还是不挂载.
umount(2)很有趣,它可以懒惰地完成,但是一旦卸载它就不能用于open(2)或creat(2)调用.
所以,我想这归结为,’原子’是什么意思?