fcntl函数加文件锁】的更多相关文章

对文件加锁是原子性的,可以用于进程间文件操作的同步.在linux下,有三个函数可以对文件进程加锁,分别是fcntl.flock.lockf.这里只说fcntl,它的用法也是最复杂的. fcntl是file control的缩写.在linux下大部分设备都是文件,所以fcntl的功能也比较多,包括: Duplicating a file descriptor(复制文件描述符) File descriptor flags(操作close-on-exec标志) File status flags(操作…
一.fcntl函数 功能:操纵文件描述符,改变已打开的文件的属性 int fcntl(int fd, int cmd, ... /* arg */ ); cmd的取值可以如下: 复制文件描述符 F_DUPFD (long) 设置/获取文件描述符标志 F_GETFD (void) F_SETFD (long) 设置/获取文件状态标志 F_GETFL (void) F_SETFL (long) 获取/设置文件锁 F_GETLK F_SETLK,F_SETLKW 其中复制文件描述符可参见<linux系…
#include <unistd.h> #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()针对(文件)描述符提供控制.参数fd是被参数cmd操作(如下面的描述)的描述符.针对cmd的值,fcntl能够接受第三个参数int arg. [返回值]fcn…
概述 fcntl函数文件锁有几个比较容易忽视的地方: 1.文件锁是真的进程之间而言的,调用进程绝对不会被自己创建的锁锁住,因为F_SETLK和F_SETLKW命令总是替换调用进程现有的锁(若已存在),所以调用进程决不会阻塞在自己持有的锁上,于是,F_GETLK命令决不会报告调用进程自己持有的锁. 2.struct flock结构指针中的l_type成员3个short值分别是: 常量 值 F_RDLCK 0 F_WRLCK 1 F_UNLCK 2 3.如果两个锁之间的文件区域有交集,就会阻塞,无论…
fcntl函数.锁定文件,设置文件锁.设置获取文件锁:F_GETLK .F_SETLK  .F_SETLKW文件锁结构,设置好用于fcntl函数的第三个参数.struct flock{    short    l_type;//锁的类型 F_RDLCK,F_WRLCK(排他锁),F_UNLCK(清除锁)    short    l_whence;//锁的范围 SEEK_SET, SEEK_CUR, SEEK_END 文件开头,当前位置,结尾.基准位置    off_t l_start;//相对于…
功能描述:根据文件描述词来操作文件的特性. #include <unistd.h> #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()针对(文件)描述符提供控制.参数fd是被参数cmd操作(如下面的描述)的描述符.针对cmd的值,fcntl…
功能描述:根据文件描述词来操作文件的特性. 文件控制函数         fcntl -- file control 头文件: #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()针…
linux文件I/O用:open.read.write.lseek以及close函数实现了文件的打开.读写等基本操作.fcntl函数可以根据文件描述词来操作文件. 用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock*lock); 参数: fd:文件描述词. cmd:操作命令. arg:供命令使用的参数. lock:同上. 有以下操…
fcntl函数提供了与网络编程相关的如下特性: 非阻塞式I/O.  通过使用F_SETFL命令设置O_NONBLOCK文件状态标志,我们可以把一个套接字设置为非阻塞型. 信号驱动式I/O. 通过使用F_SETFL命令设置O_ASYNC文件状态标志,我们可以把一个套接字设置成O_ASYNC,一旦其状态发生变化,内核就产生一个SIGIO信号. F_SETOWN命令允许我们指定用于接收SIGIO和SIGURG信号的套接字属主(进程ID或进程组ID).其中SIGIO信号是套接字被设置为信号驱动式I/O型…
一.记录锁 record locking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区. 字节范围锁 byte-range locking 二.历史 flock函数,可以锁整个文件,不能锁文件中的一部分. fcntl函数,增加了记录锁的功能. lockf函数,在fcntl基础上构造了lockf函数,提供一个简化的接口.可以锁文件中任意字节数的区域 三.fcntl 记录锁 函数原型: int fcntl(int fd, int cmd, struct flock…