当前位置:首页 > CN2资讯 > 正文内容

【Linux】Linux文件锁

7小时前CN2资讯


文件锁

前言

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

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

  • /proc/cpuinfo——CPU详细信息
  • /proc/meminfo——内存相关信息
  • /proc/version——版本信息
  • /proc/sys/fs/file-max——系统中能同时打开的文件总数
  • 可修改该文件

  • 进程的相关信息——/proc/32689/ 表示指定进程(进程号为32689)的相关信息
  • /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;
    }
    • 写锁是排他性的,文件上了写锁,就会阻止其他程序的写锁与读锁
    • 读锁可以多个程序对同一文件上读锁,除此之外其他情况也会失败(阻止其他程序的读锁与写锁)。


      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/32246.html

      分享给朋友:

      “【Linux】Linux文件锁” 的相关文章

      香港虚拟主机CN2是什么牌子的电脑型号?

      近年来,香港虚拟主机CN2作为一款备受瞩目的电脑型号,逐渐在市场中崭露头角。无论是其独特的设计理念,还是强大的性能表现,都让这款产品成为了许多消费者和专业人士的首选。很多人对“香港虚拟主机CN2”背后的品牌归属产生了浓厚的兴趣,到底是哪个品牌推出的这款产品?它的市场定位又是怎样的呢?我们需要明确“香...

      全球VPS推荐:选择最适合你的高性能虚拟服务器

      什么是全球VPS 全球VPS,全称Virtual Private Server,是一种通过虚拟化技术将物理服务器分割成多个独立虚拟服务器的服务。每个VPS都拥有独立的操作系统、资源配置和网络连接,用户可以像管理独立服务器一样管理自己的VPS。这种技术允许用户在全球范围内部署和管理他们的服务器,无论他...

      最便宜的域名注册平台推荐与选择技巧

      在创建一个新网站时,域名是一个不可或缺的部分。众所周知,一个好的域名能够提升品牌形象,也让用户更容易记住。选择便宜的域名注册平台,可以让我们在网站建设的开销上更加省钱。这里有几个我认为特别值得关注的平台,可能会对你有帮助。 1.1 NameCheap的优势与价格分析 让我先谈谈NameCheap。说...

      狗云实名认证的重要性与服务体验

      狗云简介 提起狗云(Dogyun),首先让我想起的是它在国内主机服务商中崭露头角的那段经历。成立于2019年,这家由国人创办的云服务平台,积极响应了市场对高质量、低价格VPS服务的需求。服务范围覆盖美国、日本和中国香港等地,让不少技术爱好者和企业客户看到了更多选择的可能。由于其价格相对亲民,狗云逐渐...

      RackNerd优惠活动详解:如何享受高性价比虚拟主机和VPS折扣

      RackNerd是一家在2019年成立的美国主机商。虽然成立时间不久,它却迅速在市场上崭露头角,赢得了许多VPS用户的青睐。公司的数据中心分别位于洛杉矶、圣何塞、西雅图和纽约等地,这些地理位置的选择让它的服务在各个区域都有稳定的覆盖。从我个人的体验来说,RackNerd的性价比非常高,尤其在价格和服...

      低价CDN服务指南:如何选购与优化你的网站性能

      低价CDN服务概述 在当今互联网时代,CDN(内容分发网络)已经成为提高网站性能的重要工具。简单来说,CDN通过将网站内容缓存在不同地理位置的服务器上,帮助快速传输数据,减少用户等待时间。当我第一次接触CDN时,感觉它的工作原理就像一部精密的机器,把信息高效地分发到需要的地方。尤其是低价CDN,凭借...