Я пытаюсь изучить использование semophores. То, что я пытаюсь сделать, это инициализировать семафор. Затем установите значение 1, получите это значение и распечатайте его. Но каждый раз, когда я пытаюсь это сделать, он показывает мне -1. Мой код приведен ниже. Заранее спасибо.semclt всегда возвращается -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;
}
системных вызовов часто возвращаются '-1', чтобы указать ошибку. Вы должны проверить ['errno'] (http://en.cppreference.com/w/c/error/errno), чтобы узнать, что пошло не так. Вы можете получить печатную строку ошибки, например. функция ['strerror'] (http://en.cppreference.com/w/c/string/byte/strerror). –
Код отсутствует, чтобы проверить результат 'semget()', поэтому он не уверен, что значение 'semid' представляет собой действительный идентификатор набора semephore. – alk