C语言中用于共享内存的信号量can';初始化
命令semctl始终返回-1(在控制台中返回“Fail2”)。我做错了什么C语言中用于共享内存的信号量can';初始化,c,semaphore,C,Semaphore,命令semctl始终返回-1(在控制台中返回“Fail2”)。我做错了什么 union semun{ int val; struct semid_ds *buf; unsigned short int *array; struct seminfo *__buf; } forsem; forsem.val = 0; int sem; if((sem= semget(key, 1, 0666 | IPC_CREAT) == -1)) { fprintf(s
union semun{
int val;
struct semid_ds *buf;
unsigned short int *array;
struct seminfo *__buf;
} forsem;
forsem.val = 0;
int sem;
if((sem= semget(key, 1, 0666 | IPC_CREAT) == -1)) {
fprintf(stderr, "Fail1");
}
if (semctl(sem, 0, SETVAL, forsem) == -1) {
fprintf(stderr, "Fail2");
}
Errno写入的
参数无效
您犯了一个简单的错误:在
if((sem=semget(key,10666 | IPC_create)=-1)){
fprintf(标准“故障1”);
}
你应该写
if((sem=semget(key,10666 | IPC_CREAT))=-1){
fprintf(标准“故障1”);
}
注意括号
顺便说一下,错误是
EIDRM
,因为sem
在代码中是0,而不是无效参数
谢谢您的回答!没关系。它唯一没有给出错误的是第二个参数为0(信号量集中信号量的数量)的semctl
,如果我在那里输入1或30,它将返回-1。当像semctl
这样的系统调用返回-1
时,请检查出了什么问题。你可以用得到一个可打印的字符串。我没怎么用errno。我应该写些什么来获取错误表单semctl
?E:我知道了。它给出了“无效参数”
包括头文件errno.h
,并检查变量errno
,以找出错误代码。此处有更多详细信息:一旦获得,请检查此处的错误代码的含义: