Crear los programas necesarios para resolver la siguiente situación de forma controlada: un programa padre crea una zona de memoria, escribe un valor en dicha zona de memoria y desde un lector se lee el contenido escrito en la zona de memoria.
Padre
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
#ifndef _SVID_SOURCE #define _SVID_SOURCE #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/shm.h> #include <sys/sem.h> #include <sys/ipc.h> #endif typedef struct { int num1; }zona_mem1; int main (void) { //Declaración de variables key_t clave1; //clave de acceso a la memoria 1 int shmid1; //identificador de la zona de memoria 1 zona_mem1 *pmem1; //Puntero a la 1 zona de memoria int comprobar; //variable que me indica la posibilidad de error en la llamada a funciones! char opc; //indicación de continuación de programa o terminación //Algoritmo de programa padre.c clave1 = ftok(".",'s'); //Creación de zona_mem1 shmid1 = shmget(clave1,sizeof(zona_mem1),IPC_CREAT | 0660); if(shmid1 !=-1) { printf("Zona de memoria 1 creada OK! con identificador %d \n", shmid1); } else { printf("ERROR al crear zona de memoria 1 !! \n"); exit(1); } //He obtenido los recursos que necesito, vinculo el proceso con la zona de memoria!! pmem1 = shmat(shmid1,0,0); if(pmem1 == -1) { printf("Error al vincular el proceso a la zona de memoria 1! \n"); exit(1); } pmem1 -> num1 = 0; //Mantengo en ejecución al programa padre para dar tiempo a leer do { printf("Desea Terminar?? S/N \n"); scanf("%s", &opc); if(opc == 's') { //Elimino las zonas de memoria!! comprobar = shmctl (shmid1, IPC_RMID,0); if(comprobar == -1) { printf("ERROR al eliminar la 1 zona de memoria!! \n"); exit(1); } else { printf("Zona de memoria 1 eliminada OK !!\n"); } } }while(opc !='s'); } |
Lector
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#ifndef SOURCE #define SOURCE #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <sys/shm.h> #endif typedef struct { int num1; }zona_mem1; int main (void) { //Declaración de variables key_t clave1; //clave de acceso a la memoria 1 int shmid1; //identificador de la zona de memoria 1 zona_mem1 *pmem1; //Puntero a la 1 zona de memoria int comprobar; //variable que me indica la posibilidad de error en la llamada a funciones! char opc; //indicación de continuación de programa o terminación //Algoritmo de programa lector.c clave1 = ftok(".",'s'); //Creación de zona_mem1 shmid1 = shmget(clave1,sizeof(zona_mem1),0); if(shmid1 !=-1) { printf("Zona de memoria 1 creada OK! con identificador %d \n", shmid1); } else { printf("ERROR al crear zona de memoria 1 !! \n"); exit(1); } //He obtenido los recursos que necesito, vinculo el proceso con la zona de memoria!! pmem1 = shmat(shmid1,0,0); if(pmem1 == -1) { printf("Error al vincular el proceso a la zona de memoria 1! \n"); exit(1); } else { printf("%d",pmem1 -> num1); } } |