• 文件锁 (记录锁)


    1.文件锁可以对将要修改文件的某个部分进行加锁,精确控制到字节

    通过fcntl()函数来进行设置文件锁

      fcntl(int fd,int cmd,.........);

      参数:fd:文件描述符

            cmd:F_GETLK:测试能否加锁(不过能加也不一定能加上,非原子操作。一般不用)

           F_SETLK:对文件加锁,则立即出错返回

           F_SETLKW:对文件加锁,不能加则阻塞

        第三个参数为 strcuct flock 类型的结构体  如struct folct  lock;

         

    1 lock.l_type  = F_WRLCK;        //加一把写锁   //F_RDLCK  读锁,F_UNLCK  释放锁
    2 lock.l_whence=SEEK_SET;   //相对头偏移     //SEEK_END   SEEK_CUR   
    3 lock.l_start  =0;  //相对头偏移量为0    
    4 //lock.l_start=-5;  //指针向左移5个字节开始
    5 
    6 lock.l_len    =5;  //加锁的字节数
    7 //lock.l_len  =0;  //从start之后所有内容都加锁,包括新写的。(通篇加锁)

        fctnl(fd,F_SETLKW,&lock);

      2.解锁

        lock.l_type=F_UNLCK;

        fcntl(fd,F_SETLKW,&lock);
      关闭文件会释放该进程在该文件上加的所有锁。

      注意隐含释放,如:

        newfd=dup (fd);

        close(newfd //依然会将该进程加的所有锁释放
      原因:记录锁是以进程pid标示,并非以文件描述符,一旦检测到有关闭函数,则会检查有五该进程对应的文件锁并关闭。

  • 相关阅读:
    26、实例化需求:团队如何交付正确的软件
    25、华胥引
    24、老子
    23、禅与摩托车维修艺术(又名万里任禅游)
    22、中国哲学简史
    21、人类简史-从动物到上帝(赫拉利)
    20、淘宝技术这十年
    19.验收测试驱动开发
    18. Scrum敏捷软件开发
    17、胡适谈哲学与人生
  • 原文地址:https://www.cnblogs.com/edan/p/8962056.html
Copyright © 2020-2023  润新知