如何保护文件免受多个perl应用程序访问?

时间:2014-11-11 01:02:07

标签: perl

我有一个/root/abc/sample.xml文件,许多其他应用程序(大约2000个应用程序)并行访问此文件。所以,请您建议我使用所有应用程序非常安全地访问此文件/root/abc/sample.xml的任何机制,而不会有任何文件损坏。我是perl编程的初学者。

每个应用程序都会读取此文件,并在完成此过程后将其关闭。

3 个答案:

答案 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模块(可能是矫枉过正)。