lockf()对进程加锁的例子
时间: 2023-12-15 12:03:21 浏览: 240
2.信号通信与进程控制
下面是一个使用`lockf()`函数对文件进行加锁的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd;
pid_t pid;
fd = open("test.txt", O_RDWR | O_CREAT, 0666);
if (fd < 0) {
perror("open");
exit(1);
}
pid = fork();
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) {
// 子进程
printf("Child process trying to get lock...\n");
if (lockf(fd, F_LOCK, 0) < 0) {
perror("lockf");
exit(1);
}
printf("Child process got lock!\n");
sleep(10); // 睡眠10秒钟
if (lockf(fd, F_ULOCK, 0) < 0) {
perror("lockf");
exit(1);
}
printf("Child process released lock!\n");
exit(0);
} else {
// 父进程
printf("Parent process trying to get lock...\n");
if (lockf(fd, F_LOCK, 0) < 0) {
perror("lockf");
exit(1);
}
printf("Parent process got lock!\n");
sleep(10); // 睡眠10秒钟
if (lockf(fd, F_ULOCK, 0) < 0) {
perror("lockf");
exit(1);
}
printf("Parent process released lock!\n");
exit(0);
}
}
```
该程序创建一个名为"test.txt"的文件,并在子进程和父进程之间对该文件进行加锁和释放锁的操作。子进程和父进程都会尝试获取文件的锁,如果获取成功,则输出"got lock!",并在10秒钟后释放锁。
可以使用以下命令编译和运行该程序:
```
$ gcc -o lockf_example lockf_example.c
$ ./lockf_example
```
阅读全文