PDMS 发表于 2014-10-7 23:32:49

求教 信号量控制semctl() 总是失败 返回值-1

本帖最后由 PDMS 于 2014-10-8 12:18 编辑

写了一小段代码 想学习进程间通信中信号量的使用 结果发现运行到semctl处就会卡住

perror 显示出numerical result out of range   请大家给我点拨点拨

程序的主要目的是(linux系统)在一个用户下运行之后另一个用户也运行 先运行的锁死信号灯 后运行的动不了 直到第一个输入s字符解锁


#include<stdlib.h>
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<sys/types.h>

int main()
{
struct sembuf down = {0,-1,0} ;
struct sembuf up = {0,1,0} ;

   int semid = semget(IPC_PRIVATE,1,IPC_CREAT|0666) ;// 设置信号
   if(semid!=-1)
   {
   int ctl = semctl(semid,1,SETVAL) ; // 控制信号量
   if(ctl=-1)
   {perror(" for ctl ") ;}
   
      semop(semid,&down,1) ;    // 锁定

   printf(" locked\n") ;   // 报错
   
      while(getchar()!='s')    // 死循环 直到输入字符
       {   }   

      semop(semid,&up,1) ;//   解锁
   }
}

PDMS 发表于 2014-10-8 19:56:59


竟然没人能解这可如何是好   :cry

大个的糖果 发表于 2014-11-1 04:07:52

页: [1]
查看完整版本: 求教 信号量控制semctl() 总是失败 返回值-1