📄 procesoa.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 + -