⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 procesoa.c

📁 three concurrent process in linux
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/types.h>#include <sys/semaforo.h>#include <errno.h>#define size_info 45typedef struct mensaje_completo {	char cadena [size_info];	//campo de informacion	int tamanio;			//campo tamanio	char K;				//campo K remitente	} mensaje_completo;mensaje_completo *mensaje, *mensajeMC3;int main (){	int shm1; 			//Identificador de la zona de memoria	int shm3;	int contador; 			//Numero de mensajes a enviar	int i;				//Para controlar ciclos	/*****************CREAR MEMORIA COMPARTIDA MC1**********************/	//Lave para MC1 : 10	shm1 = shmget(100, sizeof(mensaje_completo), IPC_CREAT|IPC_EXCL|SHM_R|SHM_W);   	if(shm1 == -1)      		shm1 = shmget(100, sizeof(mensaje_completo), SHM_R|SHM_W);   	printf("Cree la zona de memoria MC1 %d\n",shm1);	//lo enlazo a un proceso, mensaje apunta a la memoria compartida	mensaje=(mensaje_completo *)shmat(shm1,NULL,0);	/***************FIN MEMORIA COMPARTIDA**************************/	/************************CREAR SEMAFOROS************************/	destruyeSemaforo(obtenSemaforo(1000));   	destruyeSemaforo(obtenSemaforo(2000)); 	//Crear semaforo   	Crea_Semaforo (1000,1);	//Se_puede_escribir	(Proceso A - Proceso B)   	Crea_Semaforo (2000,0);	//Se_vale_leer		(Proceso A - Proceso B)	/************************CREAR SEMAFOROS************************/	destruyeSemaforo(obtenSemaforo(5000));	destruyeSemaforo(obtenSemaforo(6000));	//Crear semaforo	Crea_Semaforo (5000,1);	//Se_puede_escribir	(Proceso C - Proceso A)	Crea_Semaforo (6000,0);	//Se_vale_leer		(Proceso C - Proceso A)		/**************ACCESO A MEMORIA COMPARTIDA MC3***********************/	printf("Estoy accesando la memoria compartida MC3\n");   	shm3 = shmget(300, sizeof(mensaje_completo), SHM_R);	mensajeMC3=(mensaje_completo *)shmat(shm3,NULL,0);	/*************FIN DE ACCESO A LA MEMORIA COMPARTIDA MC3**************/		while (1)	{		/*****************************ENTRADA DE DATOS*******************/			printf("\nIngresa el numero de mensajes que deseas enviar: \n");		scanf("%i", &contador);			//Numero de mensajes a enviar		printf ("Contador: %d\n", contador);		/***************************************************************/				while (contador > 0)		{			int size  = (rand()%34) + 5;		//Calculo del Tamanio del campo Informacion			printf ("Size del mensaje: %d\n", size);			mensaje->tamanio=size;			//Escribirlo en la estructura			mensaje->K = 'A';			//Poner remitente									//Construir el mensaje			P(obtenSemaforo(1000));			for (i = 0; i<size; i++)			{				mensaje->cadena[i] = (rand()%256);							}						mensaje->cadena[i] = '\0';						//Mostrar informacion			printf("Informacion enviada: \n");				printf("Mensaje: %s\n",mensaje->cadena);			printf("Tamanio: %d\n", mensaje->tamanio);			printf("Envia: %c\n\n",mensaje->K);				V(obtenSemaforo(2000));			P(obtenSemaforo(6000));			printf("Informacion recibida: \n");				printf("Mensaje: %s\n",mensajeMC3->cadena);			printf("Tamanio: %d\n", mensajeMC3->tamanio);			printf("Envia: %c\n\n",mensajeMC3->K);				contador--;						V(obtenSemaforo(5000));					}		}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -