频道直达 - 专题 - 新闻 - 基础 - 高级 - 安装 - 技巧 - 数据库 - 手册 - PHP - Linux - Java - MySQL - Apache - 麻辣堂 - 狼盟 - Rails社群 - 搜索 - 下载 - 开源 - 论坛

模拟flock实现文件锁定

来源:www.phpres.com 作者:Angelover 出处:www.phpres.com 2007-9-11 17:55:56 进入讨论组
关 键 词: 锁定 文件 实现 模拟 lock tries filename lock1 lock0

主要提供了一种思路。
  $lock0和$lock1就是文件锁定的标识符,当文件被某一用户打开的时候,$lock0和$lock1就会产生,当该文件没打开则不存在。
  其实最关键就是有个标识符来表示当前这个文件的状态, $lock0和$lock1就是起这样的作用。

<?php

// Lock a file, timing out if it takes too long.
function lock ($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
);
                               return 
1
;
                       }
               }
               
usleep(100
);
       }
       return 
0
;
}

// Unlock a file.
function unlock ($lock
) {
       
unlink(".{$lock}1"
);
       
unlink(".{$lock}0"
);
}

// Usage example.
$filename "somefile"
;
$data "stuff and thingsn"
;
$tries 10
;
if (
lock($filename$tries
)) {
       
$h fopen($filename"a"
) or die();
       
fwrite($h$data
);
       
fclose($h
);
       
/**
         * 另外一个进程写文件,检查是否锁定
       */
       
if (lock($filename$tries
)) {
               
$h2 fopen($filename"a"
) or die();
               
fwrite($h2,'check lock'
);
               
fclose($h2
);
        }else{
            
//die("Failed to lock $filename after ".($tries*100)." milliseconds!";
        
}
        
unlock($filename
);
} else {
       
//die("Failed to lock $filename after ".($tries*100)." milliseconds!";
}
?> 

欢迎进入PHP开发资源论坛讨论。
收藏此文】【 】【打印】【关闭
相关文章
图文推荐
论 坛 资 源
PHP开发资源网奋斗目标
阅读排行:
热门技术文档
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容
 
   网站首页 -  网站地图 -  网站合作 -  手册中心 -  通用网址 -  网站论坛 -  网站投稿 -  友情链接 -  帮助中心
版权所有:PHP开发资源网 © 2003-2008 通用网址:PHP资源网 合作媒体: 赛迪网IT技术
互联网违法和不良信息举报中心 | 不良信息举报信箱