文件锁定是多用户多任务操作系统的一个重要组成部分
linux提供了多种特性来实现文件锁定,下面是两种不叫常用的方法:
1.最简单的方法是创建锁文件
创建锁文件时,系统将不允许任何其他的事情发生
为了创建锁文件我们使用在fcntl.h头文件中定义的带O_CREAT和O_EXCL标志的open系统调用
例如:创建test.test锁文件并赋予权限
int file_desc;
file_desc = open("test.test", O_RSWR | O_CREAT | O_EXCL, 0444);
用unlink来删除锁文件,例如删除上面建的锁文件:
unlink(file_desc);
2.锁定文件区域
使用在fcntl.h中的fcntl,函数原型为:
int fcntl(int fildes, int command, struct flock *flock_struxture);
command包含:
F_GETLK:获得fildes打开文件的锁信息
F_SETLK:对fildes指向的文件的某个区域加锁或解锁
F_SETLKW:同F_SETLK,但无法获得锁时将一直等待直到可以为止
flock结构依赖于具体实现,但至少要包含下列成员:
short l_type;
short l_whence;
off_t l_start;
off_t l_len;
pid_t l_pid;
l_type的取值在头文件fcntl.h中定义:
F_RDLCK:共享锁
F_UNLCK:解锁
F_WRLCK:独占锁
详情见《linux程序设计》