fcntl函数。锁定文件,设置文件锁。
设置获取文件锁:F_GETLK 、F_SETLK  、F_SETLKW
文件锁结构,设置好用于fcntl函数的第三个参数。
struct flock
{
    short    l_type;//锁的类型 F_RDLCK,F_WRLCK(排他锁),F_UNLCK(清除锁)
    short    l_whence;//锁的范围 SEEK_SET, SEEK_CUR, SEEK_END 文件开头,当前位置,结尾。基准位置
    off_t  l_start;//相对于基准的偏移值。定义了锁的起始
    off_t  l_len;//锁的字节数
    pid_t    l_pid;//获取哪个进程处于阻塞。仅仅当(set by F_GETLK and F_OFD_GETLK)
};

  1. 1 #include<unistd.h>
  2. 2 #include<sys/types.h>
  3. 3 #include<sys/stat.h>
  4. 4 #include<fcntl.h>
  5. 5 #include<stdlib.h>
  6. 6 #include<stdio.h>
  7. 7 #include<errno.h>
  8. 8 #include<string.h>
  9. 9 #define ERR_EXIT(m)\
  10. 10 do\
  11. 11 {\
  12. 12 perror(m);\
  13. 13 exit(EXIT_FAILURE);\
  14. 14 }while(0) //宏要求一条语句
  15. 15 int main(int argc,char*argv[])
  16. 16 {
  17. 17 int fd;
  18. 18 fd=open("test2.txt",O_CREAT|O_RDWR|O_TRUNC,0644);
  19. 19 if(fd==-1)
  20. 20 ERR_EXIT("open error");
  21. 21 struct flock lock;
  22. 22 memset(&lock,0,sizeof(lock));
  23. 23 lock.l_type=F_WRLCK;//排它锁
  24. 24 lock.l_whence=SEEK_SET;
  25. 25 lock.l_start=0;
  26. 26 lock.l_len=0;//=0表示锁定整个文件。
  27. 27
  28. 28 //if(fcntl(fd,F_SETLK,&lock)==0)
  29. 29 //F_SETLK,如果锁已经被一个进程加锁,则另一个进程再施加锁会返回失败。F_SETLKW的话,则另一个进程施加锁会阻塞。
  30. 30 if(fcntl(fd,F_SETLKW,&lock)==0) //另一个进程再次运行该程序加锁时会阻塞,直到一进程释放
  31. 31 {
  32. 32
  33. 33 printf("lock success\n");
  34. 34 printf("please press any key to unlock\n");//再开一个进程运行程序加锁会失败。
  35. 35 getchar();//读取任何字符。
  36. 36 lock.l_type=F_UNLCK;
  37. 37 if(fcntl(fd,F_SETLK,&lock)==0)
  38. 38 printf("unlock success\n");
  39. 39 else
  40. 40 ERR_EXIT("unlock fail");
  41. 41 }
  42. 42 else
  43. 43 ERR_EXIT("lock fail");
  44. 44 return 0;
  45. 45 }

fcntl函数用法——设置文件锁的更多相关文章

  1. linxu fcntl 函数用法 【转】

    功能描述:根据文件描述词来操作文件的特性. 文件控制函数         fcntl -- file control 头文件: #include <fcntl.h>;          i ...

  2. fcntl函数用法详解

    功能描述:根据文件描述词来操作文件的特性. #include <unistd.h> #include <fcntl.h>  int fcntl(int fd, int cmd) ...

  3. fcntl函数用法——操纵文件描述符状态

    fcntl函数:操纵文件描述符,改变已经打开的文件的属性int fcntl(int fd, int cmd, ... //arg  );cmd选项:一.复制文件描述符:F_DUPFD二.更改设置文件描 ...

  4. Linux下 fcntl 函数用法说明

    功能描述:根据文件描述词来操作文件的特性. 文件控制函数         fcntl -- file control LIBRARY         Standard C Library (libc, ...

  5. linux编程fcntl获取和设置文件锁

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types. ...

  6. fcntl函数用法——复制文件描述符

    文件描述符复制和输出重定向dup() 用最小的文件描述符来复制,从0开始搜素.复制文件描述符后,最小文件描述符指向被复制描述符指向的文件.dup2(int oldfd,int newfd) 强制用ne ...

  7. fcntl函数的用法总结

    fcntl系统调用可以用来对已打开的文件描述符进行各种控制操作以改变已打开文件的的各种属性 函数原型:   #include<unistd.h> #include<fcntl.h&g ...

  8. [Linux]fcntl函数文件锁概述

    概述 fcntl函数文件锁有几个比较容易忽视的地方: 1.文件锁是真的进程之间而言的,调用进程绝对不会被自己创建的锁锁住,因为F_SETLK和F_SETLKW命令总是替换调用进程现有的锁(若已存在), ...

  9. fcntl 函数与文件锁

    一.fcntl函数 功能:操纵文件描述符,改变已打开的文件的属性 int fcntl(int fd, int cmd, ... /* arg */ ); cmd的取值可以如下: 复制文件描述符 F_D ...

随机推荐

  1. 多测师讲解pthon _函数__return_高级讲师肖sir

    #函数中的返回的作用(return) 案例: #函数中的返回的作用:def fun(): #定义的一个函数 num =100 a=num/2 #print(a) #50.0 return a # pr ...

  2. 【值得收藏】C语言入门基础知识大全!从C语言程序结构到删库跑路!

    01 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成.格式.以及良好的书写风格,使小伙伴对c语言有个初步认识. 例1:计算两个整数之和的c程序: #include main() { ...

  3. centos7下面 es7.5 搭建

    centos6 搭建 参考 https://www.cnblogs.com/php-linux/p/8758788.html 搭建linux虚拟机 https://www.cnblogs.com/ph ...

  4. MySQL字段添加注释,但不改变字段的类型

    之前在导数据库数据的时候,忘记将字段的注释导过来了.现在需要将所有字段都加上注释(崩溃).由于导数据的过程比较长,业务那边从原始数据库导出了一个 Excel,里面有所有字段的注释,然后让我们根据这个注 ...

  5. PHPStorm注释缩进问题

    以下是让强迫症很难受的注释格式 以下几步即可解决强迫症的烦恼 1.点击File 2.点击setting 3.按照以下几步走 4.按照以下几步走   5.最后效果如下

  6. Windows和Mac两种操作系统下CSS不兼容问题的解决

    这两天碰到一个问题,就是一个小图标的大小和定位的位置在不同的操作系统下是不一样的. 查了下资料,自己解决出来了,整理如下: html: <i :class="['cursor-poin ...

  7. Jmeter入门(3)- Jmeter录制脚本

    一. 录制web端 1. Badboy的介绍和安装 1.1 使用第三方工具Badboy来录制. 免费的web自动化测试工具 一个浏览器模拟工具 主要进行脚本的录制和回访,和对录制脚本进行调试,可以将脚 ...

  8. zabbix自定义脚本监控服务器端口状态

    zabbix可以通过客户端的[net.tcp.port[<ip>,port]]该item监控项来判断本地/远程服务器TCP端口是否正常,不过当时没有想起来,就用了自定义脚本去写的,很久没有 ...

  9. ng中的ng-content ng-template ng-container

    在angular中,有这样三个自带的标签,但是在angular的文档中没有说明,只有在api中有简单的描述,摸索了半天才搞懂是咋回事. ng-content <div> <ng-co ...

  10. Elasticsearch启动报错:future versions of Elasticsearch will require Java 11

    1 future versions of Elasticsearch will require Java 11; your Java version from [C 2 :\Program Files ...