Programa que crea la zona de memoria compartida y almacena un valor
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 84 85 86 87 88 89 |
$codigo = ' #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 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 = ' + $(Read-Host "Valor") + '; //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"); }' $codigo | Out-File escritor.c wsl cat escritor.c bash -c "iconv escritor.c -f UTF-16 -t UTF-8 > escritors.c" wsl gcc escritors.c -o escritor wsl "./escritor" |
Zona de memoria creada
Programa que lee un valor en la zona de memoria compartida
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 |
$codigo = ' #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); } }' $codigo | Out-File lector.c wsl cat lector.c bash -c "iconv lector.c -f UTF-16 -t UTF-8 > lectors.c" wsl gcc lectors.c -o lector wsl "./lector" |