semget创建文件_信号量函数 (semget、semctl、semop)及示例

本文介绍了Linux进程间通信的信号量机制,详细讲解了semget、semctl和semop这三个核心函数的使用,包括它们的功能、参数和示例。通过示例代码展示了如何创建、控制和操作信号量,帮助读者理解和掌握信号量在多进程通信中的应用。
摘要由CSDN通过智能技术生成

Linux进程间通信之信号量(semaphore)是变量,是一种特殊的变量。它紧取正值。对信息号量的操作只有2中:

  1. 等待(wait)
  2. 发送信号(signal)

信号量比较难理解。下面我们一个个的看一下各个函数。与信号量处理的函数有:semget();semctl();semop();

第一个semget()函数

与共享内存的shmget()函数类似。

使用格式:

#includeint  semget(key_t  _key ,int  _nsems,int _semflg);

功能:创建一个新的信号量或获取一个已经存在的信号量的键值。

返回值:成功返回信号量的标识码ID。失败返回-1;

参数:

_key 为整型值,用户可以自己设定。有两种情况:

1、键值是IPC_PRIVATE,该值通常为0,意思就是创建一个仅能被进程进程给我的信号量。

2、键值不是IPC_PRIVATE,我们可以指定键值,例如1234;也可以一个ftok()函数来取得一个唯一的键值。

_nsems 表示初始化信号量的个数。比如我们要创建一个信号量,则该值为1.,创建2个就是2。

_semflg :信号量的创建方式或权限。有IPC_CREAT,IPC_EXCL。

IPC_CREAT如果信号量不存在,则创建一个信号量,否则获取。

IPC_EXCL只有信号量不存在的时候,新的信号量才建立,否则就产生错误。

下面我们看个小例子:

#include#include#define MYKEY 6666int main(){         int semid;        semid=semget(MYKEY,1,IPC_CREAT|0666);//创建了一个权限为666的信号量        printf("semid=%d",semid);        return 0;}

运行结果为:

8287b265b2ea99d626466e7e0003441c.png

我们可以用ipcs –s 来查看是否创建成功。

用ipcrm -s semid号来删除指定的信号量。

需要C/C++ Linux服务器架构师学习资料私信“资料”(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值