https://blog.csdn.net/tennysonsky/article/details/46500417

有名信号量一般用于进程间同步或互斥 

无名信号量则直接保存在内存中,而有名信号量要求创建一个文件。


1)创建一个有名信号量

所需头文件:

        #include <fcntl.h>

        #include <sys/stat.h>

        #include <semaphore.h>

当有名信号量存在时使用:

sem_t *sem_open(const char *name,int oflag);

当有名信号量不存在时使用:

sem_t *sem_open(const char *name,int oflag,mode_t mode,unsigned int value);

参数:

        name:信号量文件名。注意:不能指定路径名。因为有名信号量,默认放在/dev/shm 里

        oflag:行为标志   O_CREAT    O_RDWR

        mode:文件权限(可读 可写 可执行)的设置

        value:信号量初始值

返回值:

        成功:信号量的地址

        失败:SEM_FAILED

2)关闭有名信号量

所需头文件:

       #include <semaphore.h>

int sem_close(sem_t *sem)

返回值:

        成功:0

        失败:-1

3)删除有名信号量文件

所需头文件:

        #include <semaphore.h>

int sem_unlink(const char *name);

功能:

        删除有名信号量的文件。

参数:

        name:有名信号量文件名

返回值:

        成功:0

        失败:-1