I am trying to implement semaphores. The include file is as follows:
Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#define SEM_MODE 0666
int global_semid = 3;
void P (int semid)
{
struct sembuf sbuf;
sbuf.sem_num = semid;
sbuf.sem_op = -1;
sbuf.sem_flg = 0;
if (semop (global_semid, &sbuf, 1) < 0)
perror ("semop P");
return;
}
void V (int semid)
{
struct sembuf sbuf;
sbuf.sem_num = semid;
sbuf.sem_op = 1;
sbuf.sem_flg = 0;
if (semop (global_semid, &sbuf, 1) < 0)
perror ("semop V");
return;
}
void Init (int* semid, int value)
{
union {
int val;
struct semid_ds *buf;
u_short *array;
} arg;
arg.val = value;
if (semctl (global_semid, semid, SETVAL, arg) < 0)
perror ("semctl SETVAL");
return;
}
void Print (int semid)
{
int val;
if ((val = semctl (global_semid, semid, GETVAL)) < 0)
perror ("semctl GETVAL");
printf ("Semaphore %d's value = %d\n", semid, val);
return;
}
and then I call it in my main file:
Code:
void initialize()
{
initoutput();
queueInit(qSize);
Init(MUTEX_SEM, 1);
Init(EMPTY_SEM, qSize);
Init(FULL_SEM, 0);
Init(ITEM_ID_MUTEX_SEM, 1);
Init(INCR_CONS_COUNT_SEM, 1);
}
I keep getting a segmentation fault on this. I have tried to troubleshoot it but to no avail.