信号量函数 :semget semop semct 分析

1. semget函数

   1>函数功能:得到一个信号量集标识符或创建一个信号量集对象;
   2>函数原型:int semget(key_t key, int nsems, int semflg);
   3>函数返回值:成功时:返回值为信号量集的标识符 失败时:返回值为-1
   4>参数:(1)key:0(IPC_PRIVATE)建立新信号量集对象;
                         大于0的32位整数:视参数semflg来确定操作,通常要求此值来源于ftok返回的IPC键值
                  (2)nsems:创建信号量集中信号量的个数,该参数只在创建信号量集时有效
                  (3)msgflg:0:取信号量集标识符,若不存在则函数会报错
                                  IPC_CREAT:当semflg&IPC_CREAT为真时,如果内核中不存在键值与key相等的信号量集,则                                                        新建一个信号量集;如果存在这样的信号量集,返回信号量集的标识符
                                  IPC_CREAT|IPC_EXCL:如果内核中 不存在键值与key相等的信号量集,则新建一个消息队列;                                                                           如果存在这样的信号量集则报错
   5>所需头文件:#include  #include  #include
2. semop函数 
   1>函数功能:对信号量集标识符为semid中的一个或多个信号量进行P操作或V操作
   2>函数原型:int semop(int semid,struct sembuf *sops,unsigned nsops);
   3>函数返回值:成功:返回信号量集的标识符  失败:返回-1 错误原因存于error中
   4>参数:(1)semid:信号量集标识符
                  (2)sops:指向进行操作的信号量集结构体数组的首地址
                  (3)nsops:进行操作信号量的个数,即sops结构变量的个数,需大于或等于1
   5>所需头文件:#include  #include  #include
3. semctl函数
   1>函数功能:得到一个信号量集标识或创建一个信号量集对象
   2>函数原型:int semctl(int semid, int semnum, int cmd, union semun arg)
   3>函数返回值:成功:大于或等于0 失败: -1 错误原因存于error中
   4>参数:(1)semid:信号量集标识符
                  (2)semnum:信号量集数组下标,表示某一个信号量
                  (3)cmd:各种命令
                  (4)arg:union semun {
                                                      short val;          /*SETVAL用的值*/
                                                      struct semid_ds* buf; /*IPC_STAT、IPC_SET用的semid_ds结构*/
                                                      unsigned short* array; /*SETALL、GETALL用的数组值*/
                                                      struct seminfo *buf;   /*为控制IPC_INFO提供的缓存*/
                                                     } arg
   5)所需头文件:#include  #include  #include
                             

你可能感兴趣的:(Linux信号量)