linux 文件锁定

文件锁定

 

文件锁定是多任务操作系统中一个非常重要的组成部分。程序通常需要共享数据,而通常是通过文件来实现的。

 

创建锁文件

 

许多应用程序只要能够针对某个资源创建一个锁文件即可。然后,其他程序就可以通过检查这个文件的状态来判断它们自己

 

是否被允许访问这个资源。(锁文件仅仅只是充当一个指示器的角色,程序需要通过相互协作来使用它们)

 

实例:

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <fcntl.h>

#include <errno.h>

 

int main()

{

     int file_desc;

     int save_errno;

 

     file_desc=open("/tmp/LCK.test",ORDWR | O_CREAT | O_EXCL,0444);

     if(file_desc == -1)

     {

            save_errno = errno;

            printf("open failed with error %d/n",save_errno);

     }

     else

          printf("open succeed/n");

 

     exit (EXIT_SUCCESS);

}

 

第一次运行程序

open  succeeded


再次运行

open failed with error 17

 

锁定区域

 

用创建件锁文件的办法来控制诸如串口之类的资源的独占实访问是一个不错的选择,但他并不适合用于访问大型的共享文件。

 

比如,你有一个大文件,由一个程序写入数据,但同时又有许多不同的程序同时对这个文件进行更新。这个时候,我们可以通过

 

锁定区域来解决这个问题,文件部分被锁定,但其他程序可以访问这个文件的其他部分。linux提供至少两种方式来完成这一工作

 

使用fcntl系统调用和lockf调用。现在我们来介绍fcntl接口:

 

fcntl接口 定义:

 

#include <fcntl.h>

int fcntl (int fildes,int command,struct flock *flock_structure);

 

fcntl对一个打开的文件描述符进行操作,并能根据command参数的设置完成不同的任务。他为我们提供来三个用于文件锁的命令:

 

F_GETLK                 //获取文件锁的信息

 

F_SETLK                  //设置文件锁定的状态

 

F_SETLKW             //设置文件锁定的状态,但是无法建立锁定是,此调用会一直等到锁定动作成功为止

 

flock结构 定义如下:

 

struct flock{

 

short int l_type;                   //锁定的状态

short int l_whence;            //决定l_stat的位置

off_t    l_start;                      //锁定区域的开始位置

off_t    l_len;                        //锁定区域的大小

pid_t    l_pid;                       //锁定动作的进程

 

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值