Chinaunix首页 | 论坛 | 博客
  • 博客访问: 559078
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-12-17 15:22:49

#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) |
给主人留下些什么吧!~~