一、flock概述

bool flock  ( resource $handle  , int $operation  [, int &$wouldblock  ] )

参数

handle
文件的指针,由 fopen()  创建的 resource (资源);
operation
operation 可以是以下其中一个值:
1. LOCK_SH  取得共享锁,该锁只能用于读取文件
2. LOCK_EX  取得排他锁,该锁可以读写文件
3. LOCK_UN  解除锁定(无论是共享还是排他)

wouldblock
这是一个引用类型,上锁后如果其他进程访问此资源会阻塞,此变量将会设为true,注意:windows不支持此功能;

二,锁类型的差异

一切关于计算机对资源访问的锁定,都是基于进程而言的,进程给资源上锁的行为,可以抽象的理解为进程试图获得对该资源的操作权限,一旦获取操作权限,其他进程想要同时操作该资源时,必须等待该进程操作完成释放操作权限,其他进程才能对此资源进行操作,此概念可以防止资源争用冲突导致的各种不可预知的行为;

一般而言,资源锁只分为两种,共享锁和排他锁,也通俗地被称为读锁和写锁,再通过这两种锁型,衍生出各种概念性的锁定场景,在这里就不在讨论范围内了;

来看看两种锁定的概念;

共享锁:当一个进程给某个资源加上共享锁,其他进程同一时间内,也可以把该资源加上自己的共享锁,但是如果某进程需要向该进程加上排他锁的时候就需要等待所有的共享锁释放之后的事了,这个其间进程被阻塞以等待所有共享锁释放;

排他锁:当一个进程给某个资源加上了排他锁,其他进程需要再往这个资源添加锁定的时候(无论共享锁还是排他锁),都需要等待此排他锁释放后,这个其间进程被阻塞已等待该排他锁释放;

三、特性

flock是一种协议型锁定,它不是强制性的,也就是说,某种情况下,当一个进程没有按照约定在操作文件之前调用flock获取锁,它依然可以在没有获取锁的前提下操作文件,无论是读取或者是写入,所以flock并不可靠

上面说的某种情况下,究竟是哪种情况? wouldblock 参数被检测为0时,不过windows,并不支持这一检测,所以为了安全起见,最好遵守约定,在所有操作文件的前提时都相约先获取锁;

[PHP]flock文件IO锁的使用的更多相关文章

  1. 17、文件IO详解及实例

    上篇文章已经讲过了文件系统的一些基本的概念,这里首先对文件IO进行详细的学习,文件IO也称为系统调用IO,是操作系统为"用户态"运行的进程和硬件交互提供的一组接口,即操作系统内核留 ...

  2. 文件IO大纲

    文件流与文件描述符的区别 a) 任何进程在运行时都默认打开3个流对象,(stdin, stdout, stderr)它们都有对应的文件描述符,其文件描述符分别为0,1,2,以后打开的文件描述符的值一般 ...

  3. 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程

    前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...

  4. 2.Linux文件IO编程

    2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNI ...

  5. [11]APUE:(文件)记录锁

    [a] 概念 建议锁:在遵循相同记录锁规则的进程间生效,通常用于保证某个程序自身多个进程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后建立同名副本 ...

  6. 转 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  7. 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  8. <摘录>linux文件IO

    这篇文章写的比较全面,也浅显易懂,备份下.转载自:http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的 ...

  9. C3 文件IO:APUE 笔记

    C3:文件IO 1 引言 本章描述的函数被成为不带缓冲的IO,涉及5个函数:open.read.write.lseek.close. 文件控制:dup.sync.fsync.fdatasync.fcn ...

随机推荐

  1. 使用keytool自建证书及应用

    1. 在密钥库文件 keystore.jks 中生成证书: keytool -genkey -alias cas -keyalg RSA -keypass changeit -storepass ch ...

  2. request.setCharacterEncoding()、response.setCharacterEncoding()的区别

    request.setCharacterEncoding()是你设置获得数据的编码方式.response.setCharacterEncoding()是你响应时设置的编码.response.setCo ...

  3. JavaScript中 return; 、return false; 与return true的区别

    工作中有时候用到  return; ,有时候用到  return false;  还有时候会用到  return true; 这三个到底是什么区别?为什么一会这个一会又那个! 1.先看下return ...

  4. HTTP访问控制(CORS)

    当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求.   比如,站点 http://domain-a.com 的某 HTML 页面通过 <img ...

  5. XXE攻防技术

    http://bobao.360.cn/learning/detail/3841.html http://www.freebuf.com/articles/web/97833.html http:// ...

  6. 【bzoj 3524】[Poi2014]Couriers

    Description 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. ...

  7. css flex布局详解

    来源:https://blog.csdn.net/liveinmylife/article/details/51838939 1,flex布局是个什么东西? 官方说法:Flex是Flexible Bo ...

  8. git 重命名 origin

    git remote rename origin old-origin git remote add origin https://gitlab.com/wuxianqiang/my-project. ...

  9. Struts2基础2

    一.struts中的API 1)完全解耦合的方式 1.1首先创建一个示例工程,在WEB-INF下创建lib文件夹,把struts2核心jar包导入.在工程下创建resource文件夹,并将其设为资源文 ...

  10. Spring的常用工具类

    官方文档 http://projects.spring.io/spring-framework https://docs.spring.io/spring/docs/current/javadoc-a ...