广

PHP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    模拟flock实现文件锁定

    2018-10-18 20:39:19 次阅读 稿源:互联网
    零七广告
    主要提供了一种思路。
      $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!";  
    }  
    ?> 

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告