include <stdio.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <unistd.h>
sem_t sem;
void A()
{
printf("Post first: %d\n", sem_post(&sem));
perror("sempost");
sleep(2);
sem_post(&sem);
}
void B()
{
printf("Wait first: %d\n", sem_wait(&sem));
perror("semwait");
sleep(2);
sem_post(&sem);
}
int main(int argc, char *argv[])
{
pid_t ft;
sem = semget(IPC_PRIVATE, 1, 0666);
perror("semget");
if(fork())
{
A();
}
else
{
B();
}
sleep(1);
printf("Done\n");
semctl(sem, 0, IPC_RMID);
return(0);
}
/*
* Output:
* ~/temp $ ./a.out
* semget: Undefined error: 0
* Post first: -1
* sempost: Bad file descriptor
* Wait first: -1
* semwait: Bad file descriptor
* Done
* Done
*/