大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
1.文件锁可以对将要修改文件的某个部分进行加锁,精确控制到字节
通过fcntl()函数来进行设置文件锁
fcntl(int fd,int cmd,………);
参数:fd:文件描述符
cmd:F_GETLK:测试能否加锁(不过能加也不一定能加上,非原子操作。一般不用)
F_SETLK:对文件加锁,则立即出错返回
F_SETLKW:对文件加锁,不能加则阻塞
第三个参数为 strcuct flock 类型的结构体 如struct folct lock;
1 lock.l_type = F_WRLCK; //加一把写锁 //F_RDLCK 读锁,F_UNLCK 释放锁 2 lock.l_whence=SEEK_SET; //相对头偏移 //SEEK_END SEEK_CUR 3 lock.l_start =0; //相对头偏移量为0 4 //lock.l_start=-5; //指针向左移5个字节开始 5 6 lock.l_len =5; //加锁的字节数 7 //lock.l_len =0; //从start之后所有内容都加锁,包括新写的。(通篇加锁)
fctnl(fd,F_SETLKW,&lock);
2.解锁
lock.l_type=F_UNLCK;
fcntl(fd,F_SETLKW,&lock);
关闭文件会释放该进程在该文件上加的所有锁。
注意隐含释放,如:
newfd=dup (fd);
close(newfd) //依然会将该进程加的所有锁释放
原因:记录锁是以进程pid标示,并非以文件描述符,一旦检测到有关闭函数,则会检查有五该进程对应的文件锁并关闭。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167103.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...