-
头文件:<sys/file.h>
-
定义:int flock(int fd, int operation);
-
函数说明:flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。
-
参数说明:
- LOCK_SH 建立共享锁定。多个进程可同时对同一个文件作共享锁定。
- LOCK_EX 建立互斥锁定。一个文件同时只有一个互斥锁。
- LOCK_UN 解除文件锁定状态。
- LOCK_NB 无法建立锁定时,此操作可不被阻断,马上返回进程。通常与LOCK_SH或LOCK_EX 做OR(|)组合。单一文件无法同时建立共享锁定和互斥锁定,而当使用dup()或fork()时文件描述词不会继承此种锁定。
-
返回值:返回0表示成功,若有错误则返回-1,错误代码存于errno。
- void perror(const char *s):将上一个函数发生错误的原因输出到标准错误(stderr),参数s 所指的字符串会先打印出,后面再加上错误原因 字符串。此错误原因依照全局变量 errno 的值来决定要输出的字符串。
- char *strerror(int errno):将错误代码转换为字符串错误信息。
- extern int errno;(#include <errno.h>)可以获取errno。errno被设为以下的某个值:- EACCES:访问出错
- EAGAIN:文件已被锁定,或者太多的内存已被锁定
- EBADF:fd不是有效的文件描述词
- EINVAL:一个或者多个参数无效
- ENFILE:已达到系统对打开文件的限制
- ENODEV:指定文件所在的文件系统不支持内存映射
- ENOMEM:内存不足,或者进程已超出最大内存映射数量
- EPERM:权能不足,操作不允许
- ETXTBSY:已写的方式打开文件,同时指定MAP_DENYWRITE标志
- SIGSEGV:试着向只读区写入
- SIGBUS:试着访问不属于进程的内存区
-
flock不提供锁检查,也就是说在用flock之前需要用户自己去检查一下是否已经上了锁,说明白点就是读写文件之前用一下flock检查一下文件有没有上锁,如果上锁了flock将会阻塞在那里(An attempt to lock the file using one of these file descriptors may be denied by a lock that the calling process has already placed via another descriptor ),除非用了LOCK_NB。
C/C++ flock函数(Linux)文件锁
最新推荐文章于 2025-02-17 15:45:13 发布