flock简介
来源:互联网 发布:java ssh2 linux交互 编辑:程序博客网 时间:2024/05/19 22:44
flock() 的函数原型如下所示:
int flock(int fd, int operation);
其中,参数 fd 表示文件描述符;参数 operation 指定要进行的锁操作,该参数的取值有如下几种:
LOCK_SH:表示要创建一个共享锁,在任意时间内,一个文件的共享锁可以被多个进程拥有;
LOCK_EX:表示创建一个排他锁,在任意时间内,一个文件的排他锁只能被一个进程拥有;
LOCK_UN:表示删除该进程创建的锁;
LOCK_MAND:它主要是用于共享模式强制锁,它可以与 LOCK_READ 或者 LOCK_WRITE 联合起来使用,从而表示是否允许并发的读操作或者并发的写操作;
通常情况下,如果加锁请求不能被立即满足,那么系统调用 flock() 会阻塞当前进程。比如,进程想要请求一个排他锁,但此时,已经由其他进程获取了这个锁,那么该进程将会被阻塞。如果想要在没有获得这个排他锁的情况下不阻塞该进程,可以将 LOCK_NB 和 LOCK_SH 或者 LOCK_EX 联合使用,那么系统就不会阻塞该进程。flock() 所加的锁会对整个文件起作用。
注意:
1. 对于文件的 close() 操作会使文件锁失效;
2. 同理,进程结束后文件锁失效;
int flock(int fd, int operation);
其中,参数 fd 表示文件描述符;参数 operation 指定要进行的锁操作,该参数的取值有如下几种:
LOCK_SH:表示要创建一个共享锁,在任意时间内,一个文件的共享锁可以被多个进程拥有;
LOCK_EX:表示创建一个排他锁,在任意时间内,一个文件的排他锁只能被一个进程拥有;
LOCK_UN:表示删除该进程创建的锁;
LOCK_MAND:它主要是用于共享模式强制锁,它可以与 LOCK_READ 或者 LOCK_WRITE 联合起来使用,从而表示是否允许并发的读操作或者并发的写操作;
通常情况下,如果加锁请求不能被立即满足,那么系统调用 flock() 会阻塞当前进程。比如,进程想要请求一个排他锁,但此时,已经由其他进程获取了这个锁,那么该进程将会被阻塞。如果想要在没有获得这个排他锁的情况下不阻塞该进程,可以将 LOCK_NB 和 LOCK_SH 或者 LOCK_EX 联合使用,那么系统就不会阻塞该进程。flock() 所加的锁会对整个文件起作用。
注意:
1. 对于文件的 close() 操作会使文件锁失效;
2. 同理,进程结束后文件锁失效;
3. flock() 的 LOCK_EX 是“劝告锁”,系统内核不会强制检查锁的状态,需要在代码中进行文件操作的地方显式检查才能生效。
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <sys/file.h>char *psFile = "/var/log/test.log";int main(void) { int fd = open(psFile, O_CREAT | O_RDWR); if(fd <= 0) { printf("open file fail\n"); exit(0); } if(0 == flock(fd, LOCK_EX)) { int nIndex = 0; while(nIndex++ < 30) { printf("do something %d,%d\n", getpid(), nIndex); sleep(1); } } flock(fd, LOCK_UN); close(fd); return EXIT_SUCCESS;}
- flock简介
- flock
- flock
- flock
- flock
- flock
- php中文件锁函数flock函数用法简介
- Flock 测试
- Flock操作
- linux flock
- flock()函数
- bash flock
- 文件锁 flock及fcntl flock
- 推荐一款浏览器:flock!
- 文件锁定flock结构
- 文件锁定flock结构
- flock()函数使用示例
- linux之flock命令
- C++学习(6)——静态绑定与动态绑定
- n皇后详解及代码实现/C++
- h.264 RTP打包结构
- android执行外部操作命令
- 工作流技术趋势分析
- flock简介
- tomcat虚拟路径的几种配置方法
- uc脚本 4--常量等等
- hdu1237 简单计算器
- 字符串匹配KMP算法初探
- Sql Server中的日期与时间函数
- Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms
- Tomcat 6.0 配置--虚拟目录的设置+多域名绑定
- 如果不是异地