我有一个/root/abc/sample.xml文件,许多其他应用程序(大约2000个应用程序)并行访问此文件。所以,请您建议我使用所有应用程序非常安全地访问此文件/root/abc/sample.xml的任何机制,而不会有任何文件损坏。我是perl编程的初学者。
每个应用程序都会读取此文件,并在完成此过程后将其关闭。
答案 0 :(得分:1)
有针对此的文件锁定解决方案; flock就是一个。它提供了一个文件锁(flock()
)方法,该方法等待文件空闲然后将其锁定并解锁(unlock()
)。
对于你可以做的例子;
#!/usr/bin/env perl
use strict;
# import LOCK_* and SEEK_END constants
use Fcntl qw(:flock SEEK_END);
# Open the file
open(my $xml, ">>", "sample.xml") or die "Can't open xml $!";
# Lock the file
flock($xml, LOCK_EX) or die "Cannot lock xml - $!\n";
# Someone may have changed the file while waiting for lock
# Either re-read or seek to end depening on what your doing.
# We are just going to append some stuff so will seek to end
# for this example
seek($xml, 0, SEEK_END) or die "Cannot seek - $!\n";
# Do some stuff
print $xml "<foo>bar</foo>" ,"\n\n";
# Unlock
flock($xml, LOCK_UN) or die "Cannot unlock xml - $!\n";
答案 1 :(得分:1)
如果您的所有应用程序都只是从文件中读取(并且不写入),那么就没有问题。您可以将文件权限设置为只读以确保。
如果至少有一方试图更新文件,则数据损坏只是一个问题。
答案 2 :(得分:0)
如果您需要写访问权限,您还可以使用锁(文件锁定)或分布式锁定服务,如ZooKeeper + Net :: ZooKeeper模块(可能是矫枉过正)。