我正在尝试学习使用信号量。我想要做的是初始化一个信号量。然后将其值设置为 1,获取该值并打印出来。但每次我尝试这样做时,它都会显示 -1。我的代码如下。提前致谢。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <sys/ipc.h>
#include <sys/sem.h>
union semun {
int val;
struct semid_ds *buf;
ushort *array;
struct seminfo *__buf;
void *__pad;
};
int main(){
int pid, status, semid, value;
union semun semopts;
semid = semget(IPC_PRIVATE, 1, IPC_CREAT);
semopts.val = 1;
semctl(semid, 0, SETVAL, semopts);
value = semctl(semid, 0, GETVAL, 0);
printf("Value = %d\n", value);
return 0;
}
最佳答案
缺少至少授予自身对创建的信号量集的读/写访问权限的代码。
为此修改代码如下:
if (-1 == (semid = semget(IPC_PRIVATE, 1, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR)))
{
perror("semget() failed");
exit (EXIT_FAILURE);
}
关于c - semclt 总是返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18997473/