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

    题目:   要求1.通过函数来实现       2.引用函数传递方法        3.引用返回值   有一个登录系统:账号admin  密码123456 验证码abc123    账号.密码.验证码 ...

  2. Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.

    如果出现这个问题,说明你的github缺少公钥 使用 ssh -T git@gtihub.com 去测试 1.生成密钥 ssh-keygen -t rsa -C "your name&quo ...

  3. 【学习笔记】陀螺 Treap

    以下来自一堆人从食堂走回机房时的 yy \(\Huge{强烈谴责\ \mathrm{s\color{red}{kyh}}\ 看博客不留评论的行为}\) 听说 longdie 要爆砍 FHQ 无旋 Tr ...

  4. 【树形DP】JSOI BZOJ4472 salesman

    题目内容 vjudge链接 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇 之间都只有唯一的可能经过其它城镇的路线. 小T 可以准确地估计出在每个城镇停留的净收 益.这些 ...

  5. net core 微服务 快速开发框架

    dymDemo github 地址:https://github.com/duyanming/dymDemo dym 分布式开发框架 Demo 熔断 限流 事件总线(包括基于内存的.rabbitmq的 ...

  6. 超简单的CDH6部署和体验(单机版)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Python基础数据类型及其转换

    数据类型: 浮点型float: 3.1415 也就是小数 整型 int: 123,主要用来运算,+-*/ 字符串 str: 'abc?', 记录少量信息 布尔值 bool: True or False ...

  8. C++学习笔记---指针

    1.基本概念 作用:可以通过指针直接访问内存 内存编号是从0开始记录的,一般用16进制数字表示 可以利用指针变量保存地址 2.定义和使用 定义指针 他们的关系就是这样的 运行输出 使用指针 运行输出会 ...

  9. 使用TLSharp进行Telegram中遭遇循环体内报session.dat文件被占用时解决方式一例

    背景 公司做Telegram开发,.net Framework项目,调用TLSharp作为框架进行开发. 开发需求是读取群里新到达的信息并进行过滤. 由此不可避免得要用到 TLSharp.Core.T ...

  10. Python爬虫训练:爬取酷燃网视频数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 项目目标 爬取酷燃网视频数据 https://krcom.cn/ 环境 Py ...