sem_open打开一个已经创建的信号量,代码
时间: 2024-05-10 20:19:01 浏览: 80
Sem.rar_linux sem_linux sem.c_信号量
下面是使用`sem_open`函数打开已经创建的信号量的示例代码:
```c
#include <fcntl.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
sem_t *sem = sem_open("/my_semaphore", 0); // 打开信号量
if (sem == SEM_FAILED) {
perror("sem_open");
exit(EXIT_FAILURE);
}
// 使用信号量进行同步
if (sem_wait(sem) == -1) {
perror("sem_wait");
exit(EXIT_FAILURE);
}
printf("Semaphore acquired!\n");
// 释放信号量
if (sem_post(sem) == -1) {
perror("sem_post");
exit(EXIT_FAILURE);
}
sem_close(sem); // 关闭信号量
return 0;
}
```
在以上代码中,`sem_open`函数用于打开名为`/my_semaphore`的已经创建的信号量。第二个参数为0,表示以只读方式打开信号量。如果`sem_open`函数执行失败,会返回`SEM_FAILED`宏定义,此时可以使用`perror`函数输出错误信息并退出程序。
在成功打开信号量后,可以使用`sem_wait`函数等待信号量,并使用`sem_post`函数释放信号量。在代码最后,使用`sem_close`函数关闭信号量。
需要注意的是,使用`sem_open`打开信号量后,也要在使用完毕后使用`sem_close`函数关闭信号量,以避免资源泄漏。
阅读全文