鱼C论坛

 找回密码
 立即注册
查看: 3924|回复: 2

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

[复制链接]
发表于 2014-10-7 23:32:49 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 PDMS 于 2014-10-8 12:18 编辑

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

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

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


  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<sys/ipc.h>
  4. #include<sys/sem.h>
  5. #include<sys/types.h>

  6. int main()
  7. {
  8.   struct sembuf down = {0,-1,0} ;
  9.   struct sembuf up = {0,1,0} ;

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

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

  22.       semop(semid,&up,1) ;  //   解锁
  23.    }
  24. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-8 19:56:59 | 显示全部楼层

竟然没人能解  这可如何是好   :cry
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-11-1 04:07:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 19:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表