3

如果我的进程正在尝试从文件中读取,那么我如何从我的代码(C 语言)中确保没有其他进程写入或删除它(包括用于删除文件的系统命令)?

此外,这可以在所有操作系统(Windows、Linux、Solaris、HP-UX、VxWorks 等)上实现吗?

4

4 回答 4

3

编辑:我将为 Unix/Linux 回答

正如 gspr 和其他人所说,使用fcntl,flock等查看文件锁定。但是,请注意这些是ADVISORY LOCKING方法。

这是什么意思?这意味着您可以警告其他进程您当前正在访问一个文件或其中的一部分,但您不能强行阻止它们忽略您并在您的文件中写入所有内容

没有强制锁定原语。您可以使用权限来发挥自己的优势,但您永远无法获得完全的保证——root 用户始终可以覆盖您的限制。我认为没有办法解决这个问题。

于 2010-10-08T13:37:08.563 回答
1

对于 POSIX 系统,请查看fcntl. flock也可能很有趣,尽管我认为它不是 POSIX 的一部分。

于 2010-10-08T12:43:54.883 回答
0

您必须以 READ 共享权限打开文件,这意味着其他任何人试图打开它只能获得读取权限。正如@Pointy 所说,这是特定于操作系统的,您可能必须为 Windows、Linux 等单独编写代码。但是,大多数现代操作系统应该支持这一点。

于 2010-10-08T12:40:59.670 回答
0

复制文件,进行更改,然后将其重命名为原始文件。

如果文件尚不存在,另一种方法是使用独占标志创建文件,然后将其从文件系统中删除。执行您的写作,然后将其硬链接回文件系统(它目前仅作为打开的 inode 存在)。您可以使用/proc源路径。

于 2010-10-08T13:56:52.950 回答