锁文件夹怎么锁_密码锁有没有开锁记录

2022-09-20 16:31:43 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

  参数:fd:文件描述符

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

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

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

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

代码语言:javascript复制
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标示,并非以文件描述符,一旦检测到有关闭函数,则会检查有五该进程对应的文件锁并关闭。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167103.html原文链接:https://javaforall.cn

0 人点赞