信号量部分内容
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include<stdio.h>
// int semget(key_t key, int nsems, int semflg);
// int semctl(int semid, int semnum, int cmd, ...);
union semun
{
int val;
struct semid_ds *buf;
unsigned short *array;
struct seminfo *_buf;
};
void pGetKey(int id)
{
struct sembuf set;
set.sem_num = 0;
set.sem_op = -1;
set.sem_flg=SEM_UNDO;
semop(id,&set,1);
printf("get key\n");
}
void vPutBackKey(int id)
{
struct sembuf set;
set.sem_num = 0;
set.sem_op = 1;
set.sem_flg = SEM_UNDO;
semop(id,&set,1);
printf("put back the key\n");
}
int main(int argc , char const *argv[])
{
key_t key;
int semid;
semid =semget(key,1,IPC_CREAT|0666);
key = ftok(".",2);
union semun initsem;
initsem.val= 1;
semctl(semid,0 ,SETVAL,initsem);// init sem
int pid = fork();
if(pid>0){
pGetKey(semid);
printf("this is father pid\n");
}
else if(pid == 0){
pGetKey(semid);
printf("this is child pid\n");
vPutBackKey(semid);
}else{
printf("create fork error");
}
return 0;
}