四、文件锁的使用1、在进程PA操作文件的时候先加锁,加锁成功后然后访问文件。在加锁期间其他进程不能对文件进行改动2、访问结束后释放锁文件锁分为两种:读锁(共享锁)和写锁(互斥锁)文件对锁的实现分为两类:建议锁和强制锁3、如何对文件加锁:使用系统调用fcntl(2)对文件的加锁#include <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd, ... /* arg */ );功能:操作文件描述符参数:fd:指定了要操控的文件描述cmd:指定了操作文件描述符(这里的三个都需要第三个参数)F_GETLK:用来测试是否可以加锁,如果可以,返回F_UNLCK。不可以加锁在字段l_pid中保存了一个pid。是hold着这把锁的进程的pidF_SETLK:为文件描述符设置锁,如果有互斥锁,其他进程hold着互斥锁,立即返回-1,错误,errno被设置F_SETLKW:和F_SETLK一样,但是如果想要加的锁和文件已有记录锁冲突,进程阻塞等待进程对记录锁的释放...:可变参数,参数的类型和个数取决于CMDstruct flock *struct flock {...short l_type;    /* Type of lock: F_RDLCK,F_WRLCK, F_UNLCK */  读取锁(共享锁),写入锁(排斥锁),解锁相对位移量的起点short l_whence;  /* How to interpret l_start:EEK_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) */...};返回值:0代表成功-1 错误 errno被设置举例:文件锁的使用有两个进程PA,PB,PA进程对文件加读锁,PB进程对同一文件也加读锁,是否成功?(PA.c,PB.c)#include <stdio.h>#include <p_file.h>int main(int argc, char *argv[]) {int fd = open(argv[1], O_RDONLY);struct flock lock;if(fd == -1) {perror("open");return -1;}//对锁变量设置初值lock.l_type = F_RDLCK;lock.l_whence = SEEK_SET;lock.l_start = 0;lock.l_len = 0;lock.l_pid = 0;//对文件描述符加锁int f = fcntl(fd, F_SETLK, &lock);if(f == -1) {perror("fcntl");return -1;}getchar();//close 将关闭掉文件描述符上的所有记录锁close(fd);return 0;}A为写锁,B为写锁A:tarena@ubuntu:~/day/day28$ A hello-Btarena@ubuntu:~/day/day28$ gcc PB.c -o Btarena@ubuntu:~/day/day28$ B hello add lock success..A为写锁,B为读锁修改:int fd = open(argv[1], O_WRONLY);lock.l_type = F_WRLCKA:tarena@ubuntu:~/day/day28$ A hello-B:tarena@ubuntu:~/day/day28$ B hello -当进程A结束,B马上加锁成功举例:测试文件锁是否能添加。(PC.c PD.c)(程序PA运行中进行下面)PC.c:#include <stdio.h>#include <p_file.h>int main(int argc, char *argv[]) {struct flock lock;int fd = open(argv[1], O_RDONLY);if(fd == -1) {perror("open");return -1;}//对锁变量设置初值lock.l_type = F_RDLCK;lock.l_whence = SEEK_SET;lock.l_start = 0;lock.l_len = 0;lock.l_pid = 0;int f = fcntl(fd, F_GETLK, &lock);if(f == -1) {perror("fcntl");return -1;}if(lock.l_type == F_UNLCK) {printf("can add read lock...\n");}else {printf("hold lock %d of process",lock.l_pid);}return 0;}tarena@ubuntu:~/day/day28$ C hello can add read lock...分析: 读锁可以添加PD.c修改:int fd = open(argv[1], O_WRONLY);lock.l_type = F_WRLCKtarena@ubuntu:~/day/day28$ D hello hold lock 4350 of process分析:写锁不能添加,返回占用的进程的PID

【C语言】【unix c】文件锁的使用相关推荐

  1. memcache多语言unix socket访问

    unix socket文件目录: /usr/local/memcache/socket php访问示例: $m = new Memcached(); $ret = $m->addServer(' ...

  2. C语言UNIX时间戳4字节转北京时间

    伸手党留个评论就可以拷走使用!!! DEV C++编译可用,输出正确 可优化处欢迎讨论! #include"stdio.h" #include "stdint.h&quo ...

  3. linux时间戳转换c语言,Unix时间戳和北京时间的相互转换(C语言实现 )

    一.问题背景 最近项目中需要上传包含时间戳的设备数据到服务器平台.原本想把"年","月","日","时","分 ...

  4. Python使用fcntl文件锁

    前言 Python语言中的文件锁可以使用 fcntl 库,它实际上是对Unix系统上的 fcntl 和 ioctl 函数提供了一个接口.官网描述中是这样形容的: This module perform ...

  5. Go语言资源自动回收技术

    2019独角兽企业重金招聘Python工程师标准>>> Go语言作为一个现代化的编程语言以及支持垃圾内存的自动回收特性(GC). 我们现在关注的是非内存资源的自动回收技术. 局部资源 ...

  6. step2 . day1 Linux和C语言的高级应用

    经过了十来天的基础知识补习,自觉收获很多,在指针和二级指针即函数的应用上有了更深的理解,也完成了很多之前没能完成或者相同原理的代码段. 经过一个小测验,感觉基础基本扎实,修整一天,继续开始step2学 ...

  7. c语言学生作业ppt课件怎么做,C语言课件完整版(精华).ppt

    <C语言课件完整版(精华).ppt>由会员分享,可在线阅读,更多相关<C语言课件完整版(精华).ppt(484页珍藏版)>请在人人文库网上搜索. 1.1,计算机程序设计基础(C ...

  8. C语言初学知识准备(Linux方面)

    1 学习工具.网站.方法:     1) 分享代码平台:GitHub,码云     2) 总结知识点平台:CSDN(知识点总结.解题经历).博客园     3) 笔试题.面试题:牛客网(剑指offer ...

  9. c语言 精华,C语言课件完整版(精华)

    <C语言课件完整版(精华)>由会员分享,可在线阅读,更多相关<C语言课件完整版(精华)(484页珍藏版)>请在人人文库网上搜索. 1.1 .计算机计程仪编程基础(习语言),2, ...

  10. lsof-man-cn

    LSOF(8)系统管理员手册LSOF(8) 目录 NAME 名称 3 SYNOPSIS 概要 3 DESCRIPTION 描述 3 OPTIONS 选项 4 -? -H 5 -a 5 -A A 5 - ...

最新文章

  1. 「要拼就拼运维」5分钟一台?它让我爱上工作了!
  2. 优秀logo设计解析_优秀Logo设计!汽车类标志表现手法
  3. Winform中怎样跨窗体获取另一窗体的控件对象
  4. QT的QDtlsClientVerifier类的使用
  5. 计算机考研:河南有哪些性价比高的学校?
  6. linux查看log软件
  7. idea一直在 downloading plugins for ... 失败
  8. 关于对象和类的那些小事
  9. GitHub增加了代码审查、项目管理等新功能
  10. hibernate-annotation
  11. 服务器有些系统更新不能卸载,微软 Win10 更新 KB4577586 发布:永久删除 Adobe Flash Player,补丁无法卸载...
  12. java程序员社招自我介绍
  13. 今天不务正业的分析下昨天雷总新发布的小米12旗舰机
  14. 基于微信小程序的宠物医院诊所小程序源码
  15. 顺序表倒置java_数据结构-顺序表 java实现-Go语言中文社区
  16. WPS 广告关闭 如何取消WPS的广告? 关闭弹窗-热点-广告推送
  17. 6、Flutter Widgets 之 InkWell 和 Ink
  18. java设计最简单记账本_家庭记账本小程序之前端页面设计(java web基础版一)
  19. PDL格式解决方案Aspose.Page重磅上新!两大文档格式功能助力文档管理!
  20. html在线预览ppt excel,JavaScript实现Word、Excel、PPT在线预览

热门文章

  1. leetcode 57. 插入区间 58. 最后一个单词的长度
  2. ASEMI让工程师折服的ABS210整流桥
  3. 伊朗称以色列和美国可能是加油站网络攻击的幕后黑手、新型勒索软件或成为最大的新兴风险|11月1日全球网络安全热点
  4. 2021自主可控计算机上市公司,普华基础软件亮相2021 CCF自主可控计算机大会
  5. 其实没有几个人希望你过的比他好
  6. 制作IEC101/104报文解析工具
  7. Centos 建立一个新用户 详细讲解
  8. 本该遭拒的十大科技专利:苹果滑动解锁上榜
  9. PDF批量识别OCR,Adobe acrobat pro批量识别pdf
  10. JQuery实现超链接和图片提示预览效果