Скачиваний:
11
Добавлен:
01.05.2014
Размер:
2.6 Кб
Скачать
CLIENT.C ==>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

#include <sys/shm.h>

#include "shmem.h"

main()

{

Message *msgptr;

key_t key;

int shmid, semid;

if((key=ftok("server",'A'))<0){

printf("Error(key)\n"); exit(1);}

if((shmid=shmget(key,sizeof(Message),0))<0){

printf("Error\n"); exit(1);}

if((msgptr=(Message *) shmat(shmid,0,0))<0){

printf("Error\n");

exit(1);

}

if((semid=semget(key,2,PERM))<0){

printf("Error\n");

exit(1);}

if(semop(semid,&mem_lock[0],2)<0){

printf("Error(operation)\n");

exit(1);}

if(semop(semid,&proc_start[0],1)<0){

printf("Error(Operation)\n");

exit(1);}

sprintf(msgptr->buff,"hallo\n");

if(semop(semid,&mem_unlock[0],1)<0){

printf("Error(Operation\n");

exit(1);}

if(semop(semid,&mem_lock[0],2)<0){

printf("Error(Operation)\n");

exit(1);

}

if(shmdt(msgptr)<0){

printf("Error(Disconnect)\n");

exit(1);

}

if(shmctl(shmid,IPC_RMID,0)<0){

printf("Error(Deleting)\n");

exit(1);}

if(semctl(semid,0,IPC_RMID)<0){

printf("Error(Delete in Semafor)\n");

exit(1);}

exit(0);}


SERVER.C ==>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

#include <sys/shm.h>

#include "shmem.h"

int main()

{

Message *msgptr;

key_t key;

int shmid, semid;

if((key=ftok("server",'A'))<0){

printf("error(key)\n");

exit(1);}

if((shmid=shmget(key,sizeof(Message),PERM|IPC_CREAT))<0){

printf("error\n");

exit(1);}

if((msgptr=(Message *)shmat(shmid,0,0))<0){

printf("error(connecting)\n");

exit(1);}

if((semid=semget(key,2,PERM|IPC_CREAT))<0){

printf("Error making semafor\n");

exit(1);}

if(semop(semid, &proc_wait[0],1)<0){

printf("error executig operation\n");

exit(1);}

if(semop(semid,&mem_lock[0],2)<0){

printf("error exe operation\n");

exit(1);}

printf("%s",msgptr->buff);

if(semop(semid,&mem_unlock[0],1)<0){

printf("eror exe operation\n");

exit(1);}

if (shmdt(msgptr)<0){

printf("error disconnecting\n");

exit(1);}

exit(0);}


SHMEM.H

#define MAXBUFF 80

#define PERM 0666

typedef struct mem_msg{

int segment;

char buff[MAXBUFF];

}Message;

static struct sembuf proc_wait[1]={1,-1,0};

static struct sembuf proc_start[1]={1,1,0};

static struct sembuf mem_lock[2]={0,0,0,

0,1,0};

static struct sembuf mem_unlock[1]={0,-1,0};


#Makefile

all: server client

server: server.c

gcc server.c -o server

client: client.c

gcc client.c -o client

clean: -rm -f server client
Соседние файлы в папке Лабораторная работа №41