fcntl记录锁
#include<fcntl.h>
int fcntl(fd,F_GETLK/F_SETLK/F_SETLKW,struct flock *flockptr);
F_GETLK:测试flockptr描述的锁,是否和现有锁冲突。冲突:现有锁写入flockptr中;不冲突:flockptr不变。
F_SETLK:试图获得读锁、写锁、解锁,冲突,立即出错返回,errno为EACCES/EAGAIN
F_SETLKW:F_SETLK阻塞版,不冲突,同F_SETLK;冲突,休眠,直到可以创建锁,或者信号中断唤醒。
同一个进程,同一个区域加锁不冲突,新创建的锁直接替换原来的锁。系统会按需求组合/分裂相邻区。可以在文件尾之后加锁,不可在文件头之前加锁。
struct flock {
short l_type; /* Type of lock: F_RDLCK共享读锁, F_WRLCK独占写锁, F_UNLCK解锁 */
short l_whence; /* How to interpret l_start: SEEK_SET, SEEK_CUR, SEEK_END */
off_t l_start; /* Starting offset for lock */ 同lseek函数,制定开始位置
off_t l_len; /* Number of bytes to lock */ 指定结束位置,0标识结束位置任意远
pid_t l_pid; /* PID of process blocking our lock (F_GETLK only) */ F_GETLK测试时写入,其他时不可用
};
锁的隐含继承和释放:
1,锁与进程和文件关联:进程或文件结束,关联锁也释放
2,fork不会继承锁
3,exec继承锁,若设置了执行时关闭标志,exec后,文件描述符关闭,当然锁也释放了。
fcntl记录锁的更多相关文章
- fcntl记录锁实例
fcntl 函数是一个相当常用的对文件进行加锁操作的函数. 文件锁包括强制锁.建议锁.记录锁, 不过一般系统和内核都是用的强制锁. 以下为记录锁的例子:------------------------ ...
- 高级I/O之记录锁
若两个人同时编辑一个文件,其后果将如何呢?在很多UNIX系统中,该文件的最后状态取决于写该文件的最后一个进程.但是对于有些应用程序(例如数据库),进程有时需要确保它正在单独写一个文件.为了向进程提供这 ...
- Linux-进程间通信(六): 记录锁
1. 记录锁:记录锁的功能是,当一个进程正在读或者修改文件的某个部分的时候,它可以阻止其他进程修改同一文件区: 2. fcntl记录锁: #include <fcntl.h> int fc ...
- Linux进程同步之记录锁(fcntl)
记录锁相当于线程同步中读写锁的一种扩展类型,可以用来对有亲缘或无亲缘关系的进程进行文件读与写的同步,通过fcntl函数来执行上锁操作.尽管读写锁也可以通过在共享内存区来进行进程的同步,但是fcntl记 ...
- [11]APUE:(文件)记录锁
[a] 概念 建议锁:在遵循相同记录锁规则的进程间生效,通常用于保证某个程序自身多个进程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后建立同名副本 ...
- 非阻塞io与记录锁
非阻塞io 1.对比 阻塞io的例子:scanf从终端获取输入时,如果不输入程序就会一直停在那; 对一个已经有写锁的文件请求读时, 会一直空等直到前面的进程释放锁... 非阻塞的例子:读取文件内容, ...
- linux c编程:记录锁
记录锁相当于线程同步中读写锁的一种扩展类型,可以用来对有亲缘或无亲缘关系的进程进行文件读与写的同步,通过fcntl函数来执行上锁操作.尽管读写锁也可以通过在共享内存区来进行进程的同步,但是fcntl记 ...
- inux c编程:记录锁
记录锁的功能:当一个进程正在读或修改文件的某个部分是,它可以阻止其他进程修改同一文件区.对于这个功能阐述我认为有三点要解释的: 记录锁不仅仅可以用来同步不同进程对同一文件的操作,还可以通过对同一文件加 ...
- linux 文件记录锁详解
一: linux记录锁更恰当的称呼应该是范围锁,它是对文件某个范围的锁定. 关于记录锁的功能就是fcntl提供的第五个功能,具体使用如下: int fcntl(int fd, int cmd, str ...
随机推荐
- js糟粕
正在看<javascript语言精粹>,遇到明显的特点就记录下来,以防看了白看(噗噗~) 为了不误导,形成错误印象,文中 ‘错误设计‘ 写成 ‘现有设计’,’正确设计‘ 写成 ’期待设计‘ ...
- NSDictionary json格式字符串转字典,字典转json格式字符串
+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { if (jsonString == nil) { return ...
- 修复CefSharp浏览器组件中文输入Bug
概述 最近在win10上开发wpf应用,需要将CefSharp中wpf版本的浏览器组件(版本号v51.0.0)嵌入到应用中,但是发现不支持中文输入,GitHub上有这个问题的描述,参照其提到的方法可以 ...
- HMM模型实例 mahout官网上的案例
原理:http://www.cnblogs.com/CheeseZH/p/4229910.html Example To build a Hidden Markov Model and use it ...
- Remove Element,Remove Duplicates from Sorted Array,Remove Duplicates from Sorted Array II
以下三个问题的典型的两个指针处理数组的问题,一个指针用于遍历,一个指针用于指向当前处理到位置 一:Remove Element Given an array and a value, remove a ...
- thbgm拆包【in progress】
曾经在网上找过但是没找到过....关于东方系列bgm的格式,最初以为是个加密格式,后来听说是多个wav堆到一块儿的.再后来查到有说可以用GoldWave开的.今天试了试成功了.接下来打算研究一下,不过 ...
- CentOS上编译安装Git
1. 安装(编译安装)软件 # 先安装git依赖的包 yum install zlib-devel yum install openssl-devel yum install perl yum ins ...
- C语言基础03
1.随机数 :一个范围内随机数字的返回值. 格式为: arc4random() % ( num大值 -num小值 + 1 ) + num小值. int n,i= 0; //控制随机 ...
- Example: Develop Web application on Baidu App Engine using CherryPy
In the past few months, I have developed two simple applications on Baidu App Engine. Compared to Go ...
- servlet上传图片 服务器路径(转)
1.在servlet中上传图片,上传的文件夹是imge在webroot下,主要代码如下 private void saveImage(HttpServletRequest request, HttpS ...