Скачиваний:
15
Добавлен:
01.05.2014
Размер:
2.01 Кб
Скачать
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <unistd.h>
#include "shmem.h"

int main() {
Message *msgptr;
key_t key;
int shmid, semid;
char simbol;

//получаем ключ. Для разделяемой памяти и для семафора
if((key=ftok("server",'F'))<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);
}

while (simbol != 'q') {
	printf("Wait message from client\n");
	//Ждем. Клиент начинает работу.
	//Он блокирует разделяемую память. Затем,помещает сообщение в разделяемую память.
	//Посылает сообщение( сообщает ) серверу. Разблокирует разделяемую память.
	//printf("!!!!server-1\n");
	if(semop(semid, &proc_wait[0],1)<0){
		printf("error executig operation\n");
		exit(1);
	}
	//printf("!!!!server-2\n");
	//Блокируем разделяемую память
	if(semop(semid,&mem_lock[0],2)<0){
		printf("error exe operation\n");
		exit(1);
	}
	//printf("!!!!server-3\n");
	//Выводим сообщение из разделяемой памяти
	printf("\n");
	printf("%s",msgptr->buff);
	printf("\n");
	//printf("!!!!server-4\n");
	//Разблокируем разделяемую память( освободим ее).
	if(semop(semid,&mem_unlock[0],1)<0){
		printf("eror exe operation\n");
		exit(1);
	}
	//printf("!!!!server-5\n");
	printf("\n-press to \"q\" for exit\n-press to \"enter\" to continue   :");
	simbol = getchar();
}//while

//Отключимся от области
if (shmdt(msgptr)<0){
	printf("error disconnecting\n");
	exit(1);

}
//printf("!!!!server-6\n");
//printf("!!!!server-7\n");

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);
}//main 
Соседние файлы в папке Лабораторная работа №4