system v信号量 semcreate.c
时间: 2023-11-26 14:06:25 浏览: 93
这是一个创建 System V 信号量的 C 语言示例代码。它通过调用 semget() 函数来创建一个信号量,并将其初始化为指定的值。
```
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int main()
{
int semid, semval;
key_t key;
// 创建 key
if ((key = ftok(".", 'S')) == -1) {
perror("ftok");
exit(1);
}
// 创建信号量
if ((semid = semget(key, 1, IPC_CREAT | IPC_EXCL | 0666)) == -1) {
perror("semget");
exit(1);
}
// 初始化信号量
semval = 1;
if (semctl(semid, 0, SETVAL, semval) == -1) {
perror("semctl");
exit(1);
}
printf("Semaphore created with id %d\n", semid);
return 0;
}
```
该程序首先使用 ftok() 函数创建一个唯一的 key。然后使用 semget() 函数创建一个新的信号量,它的 key 与 ftok() 函数返回的 key 相关联。IPC_CREAT 标志指示如果信号量不存在,则创建一个新的信号量。IPC_EXCL 标志指示如果信号量已经存在,则 semget() 函数将失败。0666 权限参数指定创建的信号量的权限。
接下来,使用 semctl() 函数将信号量的值初始化为 1。SETVAL 命令指示将信号量的值设置为 semval。
最后,程序输出创建的信号量的 id。
注意:该示例代码仅用于学习和参考,实际使用时需要根据具体的需求进行修改和调整。
阅读全文