3.17信号量编程实现一(第二阶段)
代码展示
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
// int semget(key_t key, int nsems, int semflg);
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
(Linux-specific) */
};
int main(int argc,char const *argv[])
{
key_t key;
int semid;
key = ftok(".",2);
//1 biao shi xinhao liang
semid = semget(key,1,IPC_CREAT|0666);//后取信号量
//int semctl(int semid, int semnum, int cmd, ...);
union semun initsem;
initsem.val = 1;
//0表示操作第一个信号量
semctl(semid,0,SETVAL,initsem);//初始化信号量
//SETVAL 设置信号量的的值为inisem
int pid = fork();
if(pid > 0){
//去拿锁
printf("this is father\n");
//锁放回去
}
else if(pid == 0){
printf("this is child\n");
}else{
printf("fork error\n");
}
return 0;
}