锁定功能
此示例演示了 lockf
函数(POSIX XSI)的用法。
笔记:
- 仅支持独占锁。
- 可以应用于字节范围,可选择在将来附加数据时自动扩展(由
len
参数控制,并通过lseek
函数设置位置)。 - 锁定在第一次关闭时由文件的任何文件描述符的锁定过程释放,或者在进程终止时释放。
fcntl
和lockf
锁之间的相互作用是未指定的。在 Linux 上,lockf
是 POSIX 记录锁的包装器。
#include <stdlib.h> /* for exit() */
#include <stdio.h> /* for perror() */
#include <unistd.h> /* for lockf(), lseek() */
#include <fcntl.h> /* for open() */
int main(int argc, char **argv) {
/* open file
* we need O_RDWR for lockf */
int fd = open(argv[1], O_RDWR);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
/* set current position to byte 10 */
if (lseek(fd, 10, SEEK_SET) == -1) {
perror("lseek");
exit(EXIT_FAILURE);
}
/* acquire exclusive lock for bytes in range [10; 15)
* F_LOCK specifies blocking mode */
if (lockf(fd, F_LOCK, 5) == -1) {
perror("lockf(LOCK)");
exit(EXIT_FAILURE);
}
/* release lock for bytes in range [10; 15) */
if (lockf(fd, F_ULOCK, 5) == -1) {
perror("lockf(ULOCK)");
exit(EXIT_FAILURE);
}
return EXIT_SUCCESS;
}