进程通信(信号量)出现‘Invalid argument‘问题?

A_boring_traveller 2014-10-25 03:48:14
先上代码:

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

int semid;

struct sembuf sem_down = {0,-1,0};
struct sembuf sem_up = {0,1,0};

void down()
{
semop(semid,&sem_down,1);
}

void up()
{
semop(semid,&sem_up,1);
}

int main()
{
semid = semget(2345, 1, IPC_CREAT|0666);
if(semid == -1)
perror("semget error:") ;

//2,set semaphore = 1
if(semctl(semid,1,SETVAL) == -1)
perror("semctl error:") ;

//3,lock unlock
down() ;

printf("Hello world\n") ;
sleep(10) ;

up() ; // unlock
return 0 ;
}


程序编译通过,但是运行打印:
semctl error ::invalid argument
...全文
1038 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
A_boring_traveller 2014-10-29
  • 打赏
  • 举报
回复
的确是这个问题,但是程序测起来并不能得到理想的结果。。。
Cody2k3 2014-10-26
  • 打赏
  • 举报
回复
if(semctl(semid,1,SETVAL) == -1) 计数从0开始哈,而且SETVAL需要额外参数, 比如 semctl(semid, 0, SETVAL, 3)
zhxianbin 2014-10-25
  • 打赏
  • 举报
回复

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧