文件锁

前言

/proc是一个特殊的文件系统。

该目录下文件用来表示与启动、内核相关的特殊信息。

  1. /proc/cpuinfo——CPU详细信息

  2. /proc/meminfo——内存相关信息

  3. /proc/version——版本信息

  4. /proc/sys/fs/file-max——系统中能同时打开的文件总数

​ 可修改该文件

  1. 进程的相关信息——/proc/32689/ 表示指定进程(进程号为32689)的相关信息

  2. /proc/devices——已分配的字符设备、块设备的设备号


文件锁

  • 用于并发对文件I/O进行操作

用法

#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, ... /* arg */ );

参数

  • cmd——取值F_GETLK,F_SETLK和F_SETLKW,分别表示获取锁、设置锁、和同步设置锁。

struct flock {

short l_type; /*F_RDLCK, F_WRLCK, or F_UNLCK */

off_t l_start; /*offset in bytes, relative to l_whence */

short l_whence; /*SEEK_SET, SEEK_CUR, or SEEK_END */

off_t l_len; /*length, in bytes; 0 means lock to EOF */

pid_t l_pid; /*returned with F_GETLK */

};

  • l_type: 第一个成员是加锁的类型:只读锁,读写锁,或是解锁。

  • l_start和l_whence: 用来指明加锁部分的开始位置。

  • l_len: 是加锁的长度。

  • l_pid: 是加锁进程的进程id。

示例:

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define FILE_NAME "flock_demo.txt"int flock_set(int fd, int type) {printf("pid=%d come in.\n",getpid());struct flock fflock;memset(&fflock, 0, sizeof(fflock));fcntl(fd,F_GETLK,&fflock);if (fflock.l_type != F_UNLCK) {if (fflock.l_type == F_RDLCK) {//有锁,判断是读锁还是写锁printf("flock has been set to read lock by %d\n",fflock.l_pid);} else if (fflock.l_type == F_WRLCK) {printf("flock has been set to write lock by %d\n", fflock.l_pid);}}//锁定文件fflock.l_type = type;fflock.l_whence = SEEK_SET;fflock.l_start = 0;fflock.l_len = 0;fflock.l_pid = -1;//阻塞式的if (fcntl(fd,F_SETLKW,&fflock) < 0) {printf("set lock failed!\n");return -1;}switch (fflock.l_type) {case F_RDLCK:printf("read lock is set by %d\n", getpid());break;case F_WRLCK:printf("write lock is set by %d\n", getpid());break;case F_UNLCK:printf("lock is released by %d\n", getpid());break;default:break;}printf("Process pid = %d out.\n",getpid());return 0;}int main(void) {int fd = 0;fd = open(FILE_NAME, O_RDWR | O_CREAT, 0666);if (fd < 0) {printf("open file %s failed!\n",FILE_NAME);exit(-1);}//flock_set(fd, F_RDLCK); //读锁flock_set(fd, F_WRLCK);       //写锁getchar();flock_set(fd, F_UNLCK); //解锁getchar();close(fd);return 0;
}
  • 写锁是排他性的,文件上了写锁,就会阻止其他程序的写锁与读锁
  • 读锁可以多个程序对同一文件上读锁,除此之外其他情况也会失败(阻止其他程序的读锁与写锁)。

【Linux】Linux文件锁相关推荐

  1. 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记

    转载自: 九十分钟极速入门Linux--Linux Guide for Developments 学习笔记 http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA ...

  2. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.

    为了更好的排版, 所以将IK分词器的安装重启了一篇博文,  大家可以接上solr的安装一同查看. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一: http://w ...

  3. krc 编辑 linux,Linux网络编程

    6 berkeley - 145 - struct in_addr { unsigned long s_addr; }; ina struct sockaddr_in struct in_addr i ...

  4. 简单了解linux,linux简单了解

    今天主要了解下linux linux目录结构包含: /:代表根目录 bin(binaries):存放二进制可执行文件 sbin(super user binaries):存放二进制可执行文件,只有ro ...

  5. linux puppy 安装软件,puppy linux(linux操作系统)V5.7.2 官方版

    puppy linux(linux操作系统)是一款十分优秀的全新linux发行系统.平常linux操作系统太过简陋,puppy linux集合了大量所需功能.但它自带了大量的描扫仪.打印机.数码相机的 ...

  6. 什么是Linux?Linux主要用在那?为什么有Linux?

    一,什么是Linux Linux,是一个开放式系统,任何人可以根据它的源码改编,做成你想要的样子(反正就是非常开放) 为什么要开发Linux 这个说来话长,就是一位Windows程序袁,因为不满足Wi ...

  7. git管理工具 linux,linux系统下使用流行的版本管理工具 Git

    前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...

  8. tpm linux,Linux内核再次升级 支持TPM芯片

    [IT168 软件资讯]Linux内核更新是越来越快了,自Linux 2.6.11今年4月推出后,昨天李纳斯·托沃兹(Linus Torvalds)发布了Linux 2.6.12核心. Linux K ...

  9. Linux | Linux系统目录

    Linux | Linux系统目录 Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图: /bin 二进制可执行命令 /dev 设备特殊文件 /etc ...

  10. 如何在windows下格式化linux,Linux、Windows/DO格式化怎么做?

    格式化是什麽意思? 格式化(format)是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除.格式化通常分为低级格式化和高级格式化 ...

最新文章

  1. python拟合求参_机器学习作业(四)神经网络参数的拟合——Python(numpy)实现
  2. 面试之数据库SQL编写实战案例
  3. matlab计算一个长式子,matlab求积分,式子太长
  4. 关于EGE图形库在CodeBlocks下的配置
  5. 实习生招聘 | TEG 2019年暑期实习生招聘正式启动
  6. LINQ系列:LINQ to XML操作
  7. 解决若要安装 Microsoft Office 2010,需要MSXML 版本 6.10.1129的问题
  8. 离散数学之集合论【中】
  9. 消息称苹果、Epic开庭时间从2021年7月提前至5月份
  10. 手机php用什么打开手机浏览器下载,php实现读取手机客户端浏览器的类
  11. CSS基础——选择器【学习笔记】
  12. 深度学习图像分类(二):AlexNet
  13. WIN XP自动关机方法
  14. 老狗——python求中位数
  15. 2020辽宁国家公务员考试申论模拟题:过度医疗
  16. 大数据背景下互联网用户行为分析
  17. yigo基础学习笔记4_业务流程
  18. Lory Carousel滑块具有CSS动画和触摸支持
  19. Win7系统服务优化攻略
  20. 腾讯云服务器绑定域名

热门文章

  1. 探索汇率变动与股票价格的关系
  2. 重装战姬服务器维护,重装战姬2020年9月10日更新维护公告重装战姬2020年9月10日更新了什么 - 量产资源网...
  3. Raptor 经典例题 2 (冒泡法排序 100名同学拉成一圈)
  4. 数据报表开发技巧:自动为数据报表添加【小计】、【总计】行
  5. 第七届河南省程序设计大赛——A 海岛争霸
  6. 程序员的桌面是什么样的?美工:那...不是我的桌面吗?
  7. 名帖184 黄庭坚 行书《寄岳云帖》
  8. 凯云软件测试项目管理系统系统描述
  9. 第10章 Spark(全面解读Spark架构体系)
  10. 墨画子卿第四章第6节:卷轴