Advertisement
iKernel

shm1.c

Nov 7th, 2017
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/shm.h>
  4. #include <sys/ipc.h>
  5. #include <string.h>
  6.  
  7.  
  8. #define     MEM_SIZE    1024
  9. #define     PASS_UNICO  55
  10.  
  11.  
  12. int main()
  13. {
  14.     int memoriaID;
  15.     char *shmPointer;
  16.     puts("----- Este proceso escribe -----\n");
  17.  
  18.     key_t clave_unica_mem = ftok("/bin/ls", PASS_UNICO);
  19.  
  20.     /*
  21.    
  22.     ftok() Genera una "clave unica".
  23.     Le pasamos como parametros: (const char *path , int id)
  24.    
  25.     --> *path: Cualquier archivo, yo le paso el ejecutable ls porque siempre está en el sistema.
  26.     --> id: PASS_UNICO, un integer que esta definido arriba, es un numero al azar que debe coincidir en ambos programas que accedan a la shared memory.
  27.  
  28.     */
  29.    
  30.     if((memoriaID = shmget(clave_unica_mem, MEM_SIZE, 0666 | IPC_CREAT)) == -1)
  31.     {
  32.         fprintf(stderr,"Error al reservar la memoria.");
  33.         exit(EXIT_FAILURE);
  34.     }
  35.  
  36.     /*
  37.    
  38.     shmget() crea la zona de memoria compartida y devuelve un INTEGER.
  39.     Le pasamos como parametros: (key_t key, int size, int shmflag)
  40.    
  41.     key: La variable 'clave_unica_mem' que contiene lo que devolvió ftok().
  42.     size: MEM_SIZE, es el tamaño que vamos a reservar, en bytes, de la memoria compartida.
  43.     shmflag: Permisos sobre la shared memory junto a IPC_CREAT que indica que se tiene que crear la memoria en caso de que no exista.
  44.  
  45.     */
  46.  
  47.     shmPointer = shmat(memoriaID,(void *)0,0); // Devuelve un puntero a la direccion de memoria compartida
  48.  
  49.     fprintf(stdout, "Obtuvimos la memoria compartida ID: %d", memoriaID);
  50.     strcpy(shmPointer, "Texto de prueba"); // Asignamos el string al puntero que hace referencia a la memoria compartida
  51.  
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement