当前位置: 技术问答>linux和unix
gcc编程问题
来源: 互联网 发布时间:2014-10-26
本文导语: 在一段程序中为实现信号量我使用了semop( , , ) 函数,但始终运行不过去。 使用gdb debug发现就是运行到semop()所在的 行出错:individul argument 什么的。 有人成功用过semop()么? 他的三个参数分别为int,struct sembuf *,和...
在一段程序中为实现信号量我使用了semop( , , )
函数,但始终运行不过去。
使用gdb debug发现就是运行到semop()所在的
行出错:individul argument 什么的。
有人成功用过semop()么?
他的三个参数分别为int,struct sembuf *,和无符号整形对么?
函数,但始终运行不过去。
使用gdb debug发现就是运行到semop()所在的
行出错:individul argument 什么的。
有人成功用过semop()么?
他的三个参数分别为int,struct sembuf *,和无符号整形对么?
|
sem_flg只能是IPC_NOWAIT和SEM_UNDO 他们在系统定义里不一定是0,你查查include文件,我记得是 IPC_NOWAIT == 04000 SEM_UNDO == Ox1000 你最好用符号常量。 你那个错误信息是从核心里来的(system call),所以debug不好处理。
|
这个函数不好处理。
|
SYSV的信号灯确实不太好操作。 如果可能的话建议用Posix信号灯,方便多了。
|
int SemP(semid,off,flag) int semid; int off; int flag; { struct sembuf p_buf; int rtn; p_buf.sem_num=off; /*only one semaphore*/ p_buf.sem_op=-1; /*sem_op P function*/ if(flag) /*flag==1 means SEM_UNDO*/ p_buf.sem_flg=SEM_UNDO; else p_buf.sem_flg=IPC_NOWAIT; /*flag==0 means NOWAIT*/ if ((rtn=semop(semid,&p_buf,1))