dav*_*vka 2 c++ linux filesystems createfile atomicity
如果文件不存在,我需要创建一个文件,试图创建此文件的另一个进程将失败.我甚至需要在创建过程完成向其写入实际数据之前将文件视为"已创建".
我读到了O_EXCL标志open(),所以似乎解决方案存在,但我有几个问题:
open()以便将其视为已创建,然后重新打开以进行写入?该open()的手册页说,你的方法可能会失败在NFS上.
从O_EXCL部分:
与O_CREAT一起使用时,如果文件已存在,则表示错误,open()将失败.在这种情况下,无论指向何处,都存在符号链接.O_EXCL在NFS文件系统上被破坏; 依赖它来执行锁定任务的程序将包含竞争条件.
它提出了一个更通用的解决方案:
使用锁文件执行原子文件锁定的解决方案是在同一文件系统上创建一个唯一文件(例如,合并主机名和pid),使用link(2)建立到lockfile的链接.如果link()返回0,则锁定成功.否则,在唯一文件上使用stat(2)来检查其链接计数是否已增加到2,在这种情况下锁定也是成功的.
有关各种问题和方法的详细信息,请参阅本网页的"将文件用作锁定"部分.
| 归档时间: |
|
| 查看次数: |
4176 次 |
| 最近记录: |