/*A process create sem and wait sem*/
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
union semun
{
int val;
}
main()
{
//1.create semop
key_t key=ftok(".",155);
int semid=semget(key,1,IPC_CREAT|IPC_EXCL|0666);
//2.init semop
union semun v;
v.val=0;
semctl(semid,0,SETVAL,v);
//3.operate semop
struct sembuf op={};
op.sem_num=0;
op.sem_op=-1;
op.sem_flg=0;
while(1)
{
semop(semid,&op,1);
printf("remove block.\n");
}
}
================================================
/*B process get sem and send sem to A process*/
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
union semun
{
int val;
}
main()
{
//1.create semop
key_t key=ftok(".",155);
int semid=semget(key,1,0);
//2.init semop
union semun v;
v.val=0;
semctl(semid,0,SETVAL,v);
//3.operate semop
struct sembuf op={};
op.sem_num=0;
op.sem_op=+1;
op.sem_flg=0;
while(1)
{
sleep(1);
semop(semid,&op,1);
}
}