Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中用于共享内存的信号量can';初始化_C_Semaphore - Fatal编程技术网

C语言中用于共享内存的信号量can';初始化

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

命令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(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
,以找出错误代码。此处有更多详细信息:一旦获得,请检查此处的错误代码的含义: