|
5鱼币
本帖最后由 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) ; // 解锁
- }
- }
复制代码
|
|