スポンサーリンク

perlでファイルをロックする場合には、flockを使用することができます。
UNIXのNFSで使えないことが多々あります。今回は、ファイルを排他ロックします。

LOCK_EX だけ指定するとほかのプロセスがflockを呼び出したときに、ブロックされます。

if ( flock(F, LOCK_EX) ) {


LOCK_NBとLOCK_EXを指定すると、ほかのプロセスがflockを呼び出したときに、flockは直ちに返ります(false)。

if ( flock(F, LOCK_EX|LOCK_NB) ) {


サンプルコード

#!/usr/local/bin/perl -w
use strict;
use Fcntl ':flock';
my $filename = "/tmp/foo.bar.lock";

open(F, ">$filename") or die "can not open $filename: $!";

if ( flock(F, LOCK_EX|LOCK_NB) ) {
	print "File lock\n";
	# ロック中にしたい処理
	flock(F, LOCK_UN);
	print "File unlock\n";
} else {
	print STDERR "can not lock: $!\n";
}
close(F);

LOCK_NBを指定して、2つめのflockが返ったときのエラーメッセージは
can not lock: Resource temporarily unavailable
となります。
参照しているページ (サイト内): [2009-04-27-1] [2008-08-25-1] [2008-08-24-2] [2008-08-24-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー