這個(gè)url:http://www.unixresources.net/linux/clf/program/archive/00/00/36/37/363790.html
對概念理解還是可以的
假設你編寫(xiě)了一個(gè)非常出色的Perl程序。比如說(shuō)一個(gè)計數器,那么可能有許多人同時(shí)運行你的程序。它運行得如此頻繁,以致于你的程序的許多實(shí)例互相重疊了。對一個(gè)文件,一次只能進(jìn)行一個(gè)寫(xiě)工作,所以在寫(xiě)的同時(shí),要對文件加鎖,防止別的用戶(hù)也進(jìn)行寫(xiě)操作。如果你使用Windows95或Windows 98計算機,那就不必了,因為Windows系統回自動(dòng)對文件加鎖的,如果你是使用WindowsNT或UNIX的話(huà),就要對文件加鎖了。
我們一般是對要寫(xiě)的文件進(jìn)行鎖定,是用flock函數:
use Fchtl qw(:flock);
flock (FILEHANDLE,Lock_EX);
但是,在試圖讀寫(xiě)的文件上加鎖是很復雜的。由于打開(kāi)文件句柄和鎖定文件至少需要兩個(gè)步驟的進(jìn)程,因此設置文件鎖就會(huì )帶來(lái)一些問(wèn)題,首先必須打開(kāi)文件,然后才能給文件加鎖。如果用open(FH,“>filename”),然后用flock函數給文件加了鎖,那么在你獲得該鎖之前,你已經(jīng)修改了該文件(用>對文件截尾了)。通過(guò)截尾你可能修改了該文件,而其他進(jìn)程則對該文件設置了鎖。
若要解決這個(gè)問(wèn)題,就要建個(gè)標識文件,它沒(méi)有什么重要的內容,凡是對該文件擁有鎖的人,均能處理該文件。我們可以對這個(gè)標識文件進(jìn)行加鎖、解鎖,在加鎖和解鎖之間對你想要讀寫(xiě)的文件進(jìn)行操作。代碼如下:
use Fcntl qw(:flock);
sub get_lock {
open(SEM,">Temp.tmp") or die "Can't create semaphore: $!"; #Temp.tmp就是個(gè)標識文件
flock(SEM,LOCK_EX) or die "Lock failed: $!":
}
sub release_lock {
close(SEM);
}
#上面這兩個(gè)函數就是通用鎖函數
get_lock();
……
……
…… #讀寫(xiě)文件
release_lock()
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。