如何在文件写入时防止其他人读取/写入文件

Posted

技术标签:

【中文标题】如何在文件写入时防止其他人读取/写入文件【英文标题】:How to prevent others for read /write on the file, while it is writing 【发布时间】:2019-11-13 07:38:32 【问题描述】:

我想在一个进程正在写入文本文件时加锁。所以没有其他进程可以读取或写入。

【问题讨论】:

你可以尝试使用flock,但它只有在其他进程也尊重锁的情况下才能工作 Linux 上没有强制文件锁定,因此您无法阻止其他进程访问该文件。您只能使用协作锁定,这意味着所有受影响的进程必须使用相同的锁定机制。 Aix 还是 Linux?你有两个操作系统标记... Linux,至少,kind 有强制文件锁定,但它需要跳过很多圈来设置,几乎被官方弃用,不应该使用。 另一种方法是写入 临时 文件,然后在写入完成后附加到原始文件。 【参考方案1】:

Perl 中的flock 文件锁定机制是建议性的。它可用于排除其他进程访问文件如果其他进程也在使用flock。即使这种机制在某些系统中也会出现问题(我正在查看 you,NFS)。

使用其他进程不知道的匿名临时文件可能更可靠,并在完成后重命名文件。

use File::Temp;

my ($fh, $obscure_filename) = tempfile();
print $fh "some data ...\n";
...
close $fh;
rename($obscure_filename, $the_real_name_of_the_file);

【讨论】:

以上是关于如何在文件写入时防止其他人读取/写入文件的主要内容,如果未能解决你的问题,请参考以下文章

当多个进程尝试同时写入然后从文件中读取时,如何防止竞争条件

如何确保在完成写入文件之前不读取文件

如何在uwp中读取和写入其他文件夹中的文件?

在磁盘上读取/写入文件时如何限制硬盘 I/O?

如何打开一个文件进行写入以安全地允许其他程序读取?

在写入文件时读取文件