文件锁 (记录锁)

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

经过fcntl()函数来进行设置文件锁测试

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

  参数:fd:文件描述符指针

        cmd:F_GETLK:测试可否加锁(不过能加也不必定能加上,非原子操做。通常不用)code

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

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

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

     

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);class

  2.解锁di

    lock.l_type=F_UNLCK;

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

  注意隐含释放,如:

    newfd=dup (fd);

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

相关文章
相关标签/搜索