linux系统调用--fcntl函数用法总结

更新时间:2023-06-04 17:45:34 阅读: 评论:0

linux 系统调⽤--fcntl 函数⽤法总结
fcntl 系统调⽤可以⽤来对已打开的⽂件描述符进⾏各种控制操作以改变已打开⽂件的的各种属性函数原型:
#include<fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd ,struct flock* lock);
fcntl函数功能依据cmd的值的不同⽽不同。参数对应功能如下:
(1)F_DUPFD
与dup函数功能⼀样,复制由fd指向的⽂件描述符,调⽤成功后返回新的⽂件描述符,与旧的⽂件描述符共同指向同⼀个⽂件。
(2)F_GETFD
读取⽂件描述符clo-on-exec标志
(3)F_SETFD
将⽂件描述符clo-on-exec标志设置为第三个参数arg的最后⼀位
(4)F_GETFL
获取⽂件打开⽅式的标志,标志值含义与open调⽤⼀致
(5)F_SETF
会计经理
设置⽂件打开⽅式为arg指定⽅式
油爆虾的做法
[objc]
1. #include<unistd.h>
2. #include<fcntl.h>
3. int fcntl(int fd, int cmd);
4. int fcntl(int fd, int cmd, long arg);
5. int fcntl(int fd, int cmd ,struct flock* lock);  #include<unistd.h>
1
2
3
4
5
⽂件记录锁是fcntl函数的主要功能。
记录锁:实现只锁⽂件的某个部分,并且可以灵活的选择是阻塞⽅式还是⽴刻返回⽅式
当fcntl⽤于管理⽂件记录锁的操作时,第三个参数指向⼀个struct flock *lock的结构体
short_l_type⽤来指定设置共享锁(F_RDLCK,读锁)还是互斥锁(F_WDLCK,写锁).
当short_l_type的值为F_UNLCK时,传⼊函数中将解锁。
每个进程可以在该字节区域上设置不同的读锁。
但给定的字节上只能设置⼀把写锁,并且写锁存在就不能再设其他任何锁,且该写锁只能被⼀个进程单独使⽤。
这是多个进程的情况。
单个进程时,⽂件的⼀个区域上只能有⼀把锁,若该区域已经存在⼀个锁,再在该区域设置锁时,新锁会覆盖掉旧的锁,⽆论是写锁还时读锁。
l_whence,l_start,l_len三个变量来确定给⽂件上锁的区域。
l_whence确定⽂件内部的位置指针从哪开始,l_star确定从l_whence开始的位置的偏移量,两个变量
⼀起确定了⽂件内的位置指针先所指的位置,即开始上锁的位置,然后l_len的字节数就确定了上锁的区域。
特殊的,当l_len的值为0时,则表⽰锁的区域从起点开始直⾄最⼤的可能位置,就是从l_whence和l_start两个变量确定的开始位置开始上锁,将开始以后的所有区域都上锁。
为了锁整个⽂件,我们会把l_whence,l_start,l_len都设为0。
秕谷怎么读(6)F_SETLK照顾的英语
此时fcntl函数⽤来设置或释放锁。当short_l_type为F_RDLCK为读锁,F_WDLCK为写锁,F_UNLCK为解锁。
如果锁被其他进程占⽤,则返回-1;林尽水源
小乌龟能活多久
这种情况设的锁遇到锁被其他进程占⽤时,会⽴刻停⽌进程。
[objc]
1. struct flock购买欲望
2. {
3.    short_l_type;    /*锁的类型*/
4.    short_l_whence;  /*偏移量的起始位置:SEEK_SET,SEEK_CUR,SEEK_END*/
5.    off_t_l_start;    /*加锁的起始偏移*/
6.    off_t_l_len;    /*上锁字节*/
7.    pid_t_l_pid;  /*锁的属主进程ID */
8. };  struct flock {    short_l_type;    /*锁的类型*/    short_l_whence;  /*偏移量的起始位置:SEEK_SET,SEEK_CUR,SEEK_END*/    off_t_l_start;    /*加锁的起始偏移*/    off_t_l_len;    /*上锁字节*/    pid_t_l_pid;  /*锁的属主进程ID */
};
速度素质1
2
3
4
5
6
7
(7)F_SETLKW
此时也是给⽂件上锁,不同于F_SETLK的是,该上锁是阻塞⽅式。当希望设置的锁因为其他锁⽽被阻⽌设置时,该命令会等待相冲突的锁被释放。
(8)F_GETLK
第3个参数lock指向⼀个希望设置的锁的属性结构,如果锁能被设置,该命令并不真的设置锁,⽽是只修改lock的l_type为F_UNLCK,然后返回该结构体。如果存在⼀个或多个锁与希望设置的锁相互冲突,则fcntl返回其中的⼀个锁的flock结构。

本文发布于:2023-06-04 17:45:34,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/862724.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设置   位置   开始   函数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图