12

unlink, fsync, 和rename唯一的定义是原子的吗?

编辑:原子意味着一个操作要么成功并且有效果,要么已经失败并且没有效果;操作不得失败并产生效果。

显然,如果内核崩溃,程序将无法处理操作失败的错误,但在这种情况下它必须考虑它确实失败了

4

2 回答 2

14

这是一篇列出一些原子文件操作的文章:

http://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html

mv, link,symlinkmkdir一些打开文件的方式是原子的。

于 2014-06-13T13:27:55.413 回答
1

我不确定fsync(2)是原子的;如果一个文件在缓冲区缓存中有 100 兆字节的脏数据,则需要几秒钟才能将这些数据写出,并且内核可能会在传输到磁盘的过程中崩溃。也许板上的 DMA 引擎只能处理 4 兆字节的写入。也许没有 DMA 支持,CPU 必须通过 512 字节块安排每次写入。

“原子”是什么意思?

mkdir可能是“原子的”,或者目录存在于磁盘上并链接到父目录,或者目录数据结构尚未链接到父目录,因此无法访问 --> 不存在。

同样可能适用mount(2):很难找到mount(2)中途完成的,如果失败,则整个安装失败:文件系统要么已安装,要么没有。

umount(2)好笑,可以懒惰做,但是一旦卸载,就不能用于open(2)creat(2)调用。

所以,我想它归结为,你所说的“原子”是什么意思?:)

于 2011-03-08T12:08:19.383 回答