Linux C 文件锁的操作
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,文件锁的类型1 读锁共享锁,如果A进程对文件的某区域加了读锁,B进程也可以在此区域加读锁,但是不能对此区域加写锁。2 写锁独占锁,如果A进程对文件的某个区域加了写锁,B进程就不能对此区域加写锁,也不能
千家信息网最后更新 2025年02月05日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安全错误
数据库的锁怎样保障安全
服务器与客户端的通讯安全
义乌软件开发培训
sql数据库修改的语法错误
力控opc服务器能连几个客户端
夫妻都在中国银行软件开发
科脉服务器备份
wdi数据库怎么查
方舟服务器招管理员
中专软件开发前景
软件开发社团适合的logo
服务区加强网络安全会议
网络安全红队atp的要求
福州软件开发那个公司好
梦幻西游怎么突破服务器等级
检索图书信息的数据库是哪个
青岛移动软件开发报价
杰夫格林数据库
电子表格服务器软件
2022年网络安全的知识
rpm数据库出现问题
山西网络安全的公司有几家
常州.NET软件开发
王牌战士各个服务器玩家数量
车载网络技术维修论文
河北智能养老软件开发
焦作软件开发定制
oracel数据库更新慢
什么是三方网络安全服务
kuke音乐数据库
丰台区网络技术咨询需求