Dan*_* D. 7 filesystems operations atomic atomicity
是unlink,fsync和rename唯一的定义原子?
编辑:原子意味着操作成功并具有效果或失败并且无效; 操作必须不会失败并产生影响.
很明显,如果内核发生混乱,程序无法处理操作失败的错误,但在这种情况下必须考虑它确实失败了
这是一篇列出一些原子文件操作的文章:
http://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html
mv,link,symlink,mkdir和打开文件的一些方法是原子的.
我不确定fsync(2)是否是原子的;如果一个文件在缓冲区缓存中有 100 兆字节的脏数据,则需要几秒钟的时间才能将该数据写出,并且在传输到磁盘的过程中内核可能会崩溃。也许板上的 DMA 引擎只能处理 4 MB 的写入。也许没有 DMA 支持,CPU 必须通过 512 字节块来调度每次写入。
“原子”是什么意思?
mkdir可能是“原子”,目录存在于磁盘上并链接到父目录,或者目录数据结构尚未链接到父目录,因此无法访问 --> 不存在。
同样的情况也可能发生mount(2):很难找到一个mount(2)半途完成的文件系统,如果失败,整个安装都会失败:文件系统要么已安装,要么没有安装。
umount(2)有趣的是,它可以懒惰地完成,但是一旦卸载,就不能用于open(2)或creat(2)调用。
所以,我想这可以归结为“原子”是什么意思?:)