Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:лабораторки по ОС препод Челноков / 2семестр / wi2 / olesha / kurswork / 1
.c#include "share_ex.h"
#define IFLAGS (IPC_CREAT | IPC_EXCL)
#define ERR ((struct databuf *) -1)
static int shmid1, shmid2, semid;
void getseg(struct databuf **p1, struct databuf **p2){
if((shmid1 = shmget(SHMKEY1, sizeof(struct databuf), 0600|IFLAGS))=-1)
perror("shmget");
if((shmid2 = shmget(SHMKEY2, sizeof(struct databuf), 0600|IFLAGS))=-1)
perror("shmget");
if((*p1 = (struct databuf *)shmat(shmid1, 0, 0)) == ERR)
perror("shmat");
if((*p2 = (struct databuf *)shmat(shmid2, 0, 0)) == ERR)
perror("shmat");
}
int getsem(void){
union semun x;
x.val = 0;
if((semid = semget(MEMKEY, 2, 0600|IFLAGS)) =-1)
perror("semget");
if(semctl(semid, 0, SETVAL, x) == -1)
perror("semctl");
if(semctl(semid, 1, SETVAL, x) == -1)
perror("semctl");
return (semid);
}
void remobj(void){
if(shmctl(shmid1, IPC_RMID, NULL) ==-1)
perror("semctl");
if(shmctl(shmid2, IPC_RMID, NULL) ==-1)
perror("semctl");
if(shmctl(semid,0, IPC_RMID, NULL) ==-1)
perror("semctl");
}