#include
int fcntl(int fd, int cmd, .../* struct flock *arg */ );
返回值:若成功则取决于cmd,若出错则返回-1;
用于记录上锁的cmd参数共有三个值。
F_SETLK ----获取(l_type为F_RDLCK或F_WRLCK)或释放(F_UNLCK)由arg指向的flock结构所描述的锁,如果无法获取锁,该函数立即返回一个EACCESS或EAGAIN错误而不阻塞
F_SETLKW----与F_SETLK类似,区别在与无法获取锁的时候,将调用线程阻塞到能获取该锁位置。
F_GETLK ----检查由arg指向的锁以确定是否有某个已存在的锁会妨碍将新锁授予调用进程。如果当前没有这样的锁存在,由arg指向的flock结构的l_type成员就被置为F_UNLCK。否则,关于这个已存在锁的信息将在由arg指向的flock结构中返回,也就是说,该结构的内容由fcntl函数覆写,其中包括持有该锁的进程的进程ID。
这三个命令要求第三个参数arg是指向某个flock结构的指针,
struct flock {
short l_type; /*F_RDLCK,F_WRLCK,F_UNLCK*/
short l_whence; /*SEEK_SET,SEEK_CUR,SEEK_END*/
off_t l_start; /*relative starting offset in bytes*/
off_t l_len; /* #bytes; 0 means until end-of-file */
pid_t l_pid; /*PID returned by F_GETLK*/
};
阅读(666) | 评论(0) | 转发(0) |