Linux C 文件锁的操作
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,文件锁的类型1 读锁共享锁,如果A进程对文件的某区域加了读锁,B进程也可以在此区域加读锁,但是不能对此区域加写锁。2 写锁独占锁,如果A进程对文件的某个区域加了写锁,B进程就不能对此区域加写锁,也不能
千家信息网最后更新 2026年11月02日Linux C 文件锁的操作
文件锁的类型
1 读锁
共享锁,如果A进程对文件的某区域加了读锁,B进程也可以在此区域加读锁,但是不能对此区域加写锁。
2 写锁
独占锁,如果A进程对文件的某个区域加了写锁,B进程就不能对此区域加写锁,也不能对此区域加读锁。
当多个进程同时对一个文件进行读写操作时,为确保文件的完整和一致性,这几个进程要加锁同步。
当进程开始读取文件的某个区域时,先加读锁,读完之后再解锁。
3 文件记录锁
文件记录锁
1.函数原型:int fcntl (int fd,int cmd,struct flck lock);
参数:fd:文件描述符;
cmd:功能符号;(F_SETLK用来设置或释放锁; F_GETLK用来获得锁信息;)
lock:存储锁信息的结构体指针;
返回值:调用成功返回0,失败返回-1
2.锁信息结构体
struct flock
{
short l_type; / 锁的类型 /
short l_whence; / 偏移量的起始位置: /
off_t l_start; / 从l_whence的偏移量 /
off_t l_len; / 从l_start开始的字节数 /
pid_t l_pid; / 锁所属进程ID(一般不用) */
}
l_type有F_RDLCK读锁、F_WRLCK写锁及F_UNLCK空锁。
(!!注意:读锁,不会影响数据,可以一直加;但是写锁,只能加一次)
l_whence有SEEK_SET、SEEK_CUR和SEEK_END。
l_len为0时表示从起点开始直至最大可能位置为止。
下面举个加写锁的例子:
#include < stdio.h>#include < unistd.h>#include < fcntl.h>/** int fctnl(int fd,int cmd,struct *lock); //cmd:F_SETLK设置或解放锁;F_GETLK获得锁信息;返回值:0-成功,-1-失败 struct flock{ short l_type; // of lock:F_RDLCK,F_WRLCK,F_UNLCK short l_whence; //How to interpreter l_start:SEEK_SET,SEEK_CUR,SEEK_END off_t l_start; //Starting offset for lock off_t l_len; //Number of bytes to lock pid_t l_pid; //PID of process blocking our lock(F_GETLK only)};*/int main(){ int fd; int res; struct flock lock = {0}; if((fd = open("a.txt",O_RDWR)) == -1) { fd = open("a.txt", O_CREAT); } if(fd == -1) { printf("file open failed!\n"); return 1; }// printf("fd=%d\n",fd); //判断是否有锁 res = fcntl(fd,F_GETLK,&lock); if(res == -1) { perror("判断有锁失败"); return 1; } if(lock.l_type != F_UNLCK) { printf("fail:the file has locked!\n"); } else //上写锁,读锁可以一直加,写锁只能加一个 { memset(&lock,0,sizeof(struct flock)); lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 10; lock.l_type = F_WRLCK; res = fcntl(fd,F_SETLK,&lock); if(res == -1) { perror("上锁失败"); return 1; } //操作文件 getchar(); //解锁 lock.l_type = F_UNLCK; res = fcntl(fd,F_SETLK,&lock); if(res == -1) { perror("解锁失败"); return 1; } } close(fd); return 0;}
关于多个进程上锁的问题,本质上步骤一样,后面复习中陆续再更...
文件
进程
区域
信息
对此
成功
位置
多个
类型
结构
偏移
最大
一致
一致性
不用
例子
函数
功能
原型
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
有格互联网科技
上海睿民互联网科技有限公司
广州淘业互联网络科技
重庆互联网络科技
互联网 视角下的科技创新
融贸通互联网科技
科技互联网创业计划书
科技互联网的估值
全球顶尖互联网科技公司
湖北码尼互联网科技有限公司电话
速维有品互联网信息科技(苏州)有限公司
恒生互联网科技业指数调整周期
互联网方面的科技前沿
元气玛特互联网科技公司是外包吗
雨阳互联网卡科技有限公司
互联网界的黑科技
银川新华互联网科技学校原画
黑龙江互联网科技公司
重庆科技产业互联网有哪些
广东猫王互联网科技有限公司电话
南京欣网互联网络科技有限公司
未来的互联网科技
深圳齐家互联网科技
互联网科技缩写
无线互联网科技
多迪互联网科技有限公司
互联网营销推广黑科技
张召忠谈中国互联网科技
山东蛋芒互联网科技有限公司
互联网领先科技成果宣传视频