欢迎来到福编程网,本站提供各种互联网专业知识!

模拟flock实现文件锁定

发布时间:2007-02-14 作者: 来源:转载
主要提供了一种思路。$lock0和$lock1就是文件锁定的标识符,当文件被某一用户打开的时候,$lock0和$lock1就会产生,当该文件没打开则不存在。其实最关键就是有个标识符来表示当前这个文件的状态,$lock0和$lock1就是起这样的作用。复制代码代码如下:
主要提供了一种思路。
$lock0和$lock1就是文件锁定的标识符,当文件被某一用户打开的时候,$lock0和$lock1就会产生,当该文件没打开则不存在。
其实最关键就是有个标识符来表示当前这个文件的状态,$lock0和$lock1就是起这样的作用。

复制代码 代码如下:

//Lockafile,timingoutifittakestoolong.
functionlock($lock,$tries){
$lock0=".{$lock}0";
$lock1=".{$lock}1";
for($i=0;$i<$tries;$i++){
if(!is_file($lock0)){
touch($lock0);
if(!is_file($lock1)){
touch($lock1);
return1;
}
}
usleep(100);
}
return0;
}

//Unlockafile.
functionunlock($lock){
unlink(".{$lock}1");
unlink(".{$lock}0");
}

//Usageexample.
$filename="somefile";
$data="stuffandthingsn";
$tries=10;
if(lock($filename,$tries)){
$h=fopen($filename,"a")ordie();
fwrite($h,$data);
fclose($h);
/**
*另外一个进程写文件,检查是否锁定
*/
if(lock($filename,$tries)){
$h2=fopen($filename,"a")ordie();
fwrite($h2,'checklock');
fclose($h2);
}else{
//die("Failedtolock$filenameafter".($tries*100)."milliseconds!";
}
unlock($filename);
}else{
//die("Failedtolock$filenameafter".($tries*100)."milliseconds!";
}
?>

相关推荐