求教 信号量控制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) ;// 解锁
}
}
竟然没人能解这可如何是好 :cry
页:
[1]