操作系统中常用信号量相关系统调用函数用法
1、sem_open:用于创建或打开一个命名的信号量。
点击查看代码
#include <semaphore.h>
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
name:信号量的名称,必须以斜杠开头,例如/my_semaphore。
oflag:打开标志,可以为O_CREAT(创建信号量)和O_EXCL(只在信号量不存在时创建)的组合,或者为0(打开现有信号量)。
mode:信号量的访问权限,通常使用S_IRUSR | S_IWUSR表示用户可读写,并且可以通过’或|‘进行组合可选项如下:
S_IRUSR:用户(拥有者)具有读权限。
S_IWUSR:用户(拥有者)具有写权限。
S_IRGRP:组成员具有读权限。
S_IWGRP:组成员具有写权限。
S_IROTH:其他用户具有读权限。
S_IWOTH:其他用户具有写权限。
value:信号量的初始值(计数器的初始值)。
sem_open函数返回一个指向信号量的指针,可以在后续的信号量操作中使用该指针。
2、sem_close:关闭一个已经打开的信号量。
点击查看代码
#include <semaphore.h>
int sem_close(sem_t *sem);
sem:指向要关闭的信号量的指针。
3、sem_wait:等待信号量,并对其进行P(原子减一)操作。
点击查看代码
#include <semaphore.h>
int sem_wait(sem_t *sem);
sem:指向要等待的信号量的指针。
返回值为0表示成功
4、sem_post:对信号量进行V(原子加一)操作。
点击查看代码
#include <semaphore.h>
int sem_post(sem_t *sem);
sem:指向要发布的信号量的指针。
sem_post函数会将信号量的值加一。如果有其他进程正在等待该信号量,则其中一个进程将被唤醒。
5、sem_unlink:用于删除(取消关联)一个命名信号量。
点击查看代码
#include <fcntl.h>
int sem_unlink(const char *name);
返回值为0表示删除成功
特别注意:在使用以上系统调用时,编译时需要加上-pthread,以确保正确链接线程和实时库
标签:include,操作系统,int,信号量,实验,sem,权限,指针 From: https://www.cnblogs.com/starstxg/p/18085240