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