Inkompatibel pointer
Jeg har et problem omkring pointeren i semop i funktionerne wait og signal, da jeg får warnings omkring pointerfejlen. Det er formentligt derfor, at programmet ikke tæller semaphoren ned! Kan i hjælpe mig med hvad der er galt?#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <errno.h>
union semun
{
int val;
struct semdid_ds *buf;
unsigned short int *array;
struct seminfo *__buf;
}sem_union;
struct sembuf_struct
{
short sem_num;
short sem_op;
short sem_flg;
};
int semid;
int wait()
{
struct sembuf_struct sembuf;
sembuf.sem_num = 0;
sembuf.sem_op = -1;
sembuf.sem_flg = SEM_UNDO;
if(semop(semid, &sembuf, 1)==-1)
{
printf("wait fejl: %d\n", errno);
perror("fail");
return 0;
}
return 1;
}
int signal()
{
struct sembuf_struct sembuf;
sembuf.sem_num = 0;
sembuf.sem_op = 1;
sembuf.sem_flg = SEM_UNDO;
if(semop(semid, &sembuf, 1)==-1)
{
printf("wait fejl: %d\n", errno);
perror("fail");
return 0;
}
return 1;
}
int main()
{
semid = semget((key_t)2432, 1, 0666 | IPC_CREAT);
printf("semaphore id %d\n", semid);
sem_union.val = 1;
if(semctl(semid, 0, SETVAL, sem_union)==-1)
printf("Kunne ikke initialisere semaphore\n");
wait();
printf("HER MAA KUN VAERE EN PROCESS\n");
sleep(30);
signal();
return 1;
}
Hilsen Kenneth