文件锁的应用

简介: 文件锁的应用

NAME

      fcntl - manipulate file descriptor

SYNOPSIS

      #include <unistd.h>

      #include <fcntl.h>

      int fcntl(int fd, int cmd, ... /* arg */ );

DESCRIPTION

      fcntl()  performs  one  of the operations described below on the open file

      descriptor fd.  The operation is determined by cmd.

 

#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#define FILE_NAME "flock.txt"
int set_lock(const int fd,const int type){
    printf("pid: %d\n",getpid());
    struct flock fflock;
    memset(&fflock ,0,sizeof(struct flock));
    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("read lock is set by %d\n",getpid());
            break;
        case F_UNLCK:
            printf("read lock is set by %d\n",getpid());
            break;
    }
    printf("Process pid =%d out. \n",getpid());
    return 0;
}
int main(void){
    int fd=open(FILE_NAME,O_RDWR|O_CREAT,0666);
    if(fd<0){
  printf("file: %s open failed!!!\n",FILE_NAME);
  exit(-1);
    }
    //lock
    set_lock(fd,F_WRLCK);//对文件上写锁
    getchar();
    //unlock
    set_lock(fd,F_UNLCK);//解锁
    getchar();
    return 0;
}

对上述代码进行参数修改(F_RDLCK,F_WRLCK,F_UNLCK)可观察不同文件锁的权限影响.

结论:当对文件上写锁后,则不可以再对文件写或读.

当对文件上读锁后,则不可以再对文件写,但可以读.

目录
相关文章
|
1月前
FileLock 多进程文件锁
FileLock 多进程文件锁
16 0
|
4月前
|
Linux 开发者
【亮剑】Linux系统中的四种文件锁定机制:flock、fcntl、lockfile和flockfile,用于多进程环境下协调共享资源访问,防止数据损坏和竞争条件
【4月更文挑战第30天】本文介绍了Linux系统中的四种文件锁定机制:flock、fcntl、lockfile和flockfile,用于多进程环境下协调共享资源访问,防止数据损坏和竞争条件。flock适合脚本,fcntl提供底层灵活性,lockfile用于管理锁定文件,flockfile则结合两者功能。选择锁定策略时需考虑应用场景,如脚本可选flock,复杂需求则用fcntl。理解并正确使用这些工具对保证系统稳定性和数据一致性至关重要。
215 1
|
4月前
|
存储 Linux 程序员
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(中)
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(中)
|
4月前
|
缓存 Linux 调度
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(上)
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(上)
|
4月前
|
安全 算法 Linux
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(下)
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(下)
|
Linux
Linux下面Crontab文件锁实现进程互斥
Linux下面Crontab文件锁实现进程互斥
130 0
Linux下面Crontab文件锁实现进程互斥
|
Linux Shell
Linux 基于flock命令实现多进程并发读写文件控制
Linux 基于flock命令实现多进程并发读写文件控制
588 0
使用共享内存作为进程互斥锁的代码
使用共享内存作为进程互斥锁的代码
102 0