如何在文件写入时防止其他人读取/写入文件
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);
【讨论】:
以上是关于如何在文件写入时防止其他人读取/写入文件的主要内容,如果未能解决你的问题,请参考以下文章