Comunicación entre procesos de Linux modo de memoria compartida

  

Modo de memoria compartida: tome parte de la memoria física y compártala como procesos múltiples.

La memoria compartida es la forma más rápida de compartir datos entre procesos. Un proceso escribe datos en un área de memoria compartida y todos los procesos que comparten la memoria pueden ver el contenido de inmediato.

Pasos de implementación de la memoria compartida:

Primero, cree una memoria compartida, use la función shmget.

Segundo, asigne memoria compartida, asigne la memoria compartida creada al espacio de proceso específico, use la función shmat.

Crear shmget de memoria compartida:

intshmget (key_t key, size_t size, int shmflg)

Función: obtener un identificador de memoria compartida o crear un objeto de memoria compartida y devolver Identificador de memoria compartida.

: 0 (IPC_PRIVATE) creará un objeto de memoria compartida

tamaño: un entero mayor que 0, el tamaño de la nueva memoria compartida, en bytes. Cuando solo se obtiene la memoria compartida, se especifica como 0.

shmflg:

0 significa tomar el identificador de la memoria compartida, si no existe, la función informará un error;

IPC_CREAT, si el kernel Si no hay memoria compartida con el mismo valor de clave y clave, cree una memoria compartida; si existe dicha memoria compartida, devuelva el identificador de la memoria compartida;

IPC_CREAT | IPC_EXCL: Si no hay una memoria compartida con el mismo valor de clave y clave en el kernel, cree una nueva cola de mensajes; si existe tal memoria compartida, informará un error; Luego devuelve -1, el motivo del error existe en error

asignando memoria compartida al espacio de direcciones del proceso de llamada shmat:

void * shmat (int shmid, const void * shmaddr, int shmflg) < Br>

msqid: Identificador de memoria compartida

shmaddr: especifique dónde aparece la memoria compartida en la dirección de la memoria del proceso, especificando NULL directamente para que el kernel determine su propia ubicación de dirección apropiada.

shmflg: SHM_RDONLY Modo de solo lectura, los demás son de lectura y escritura.

Valor de retorno de la función: si tiene éxito, devuelve la dirección de memoria compartida adjunta; el error devuelve -1; Br>

Desconecta la conexión de memoria compartida shmdt:

intshmdt (const void * shmaddr)

Función: Shmaddr entrante, dirección de inicio de la memoria compartida de conexión; 0, un error devuelve -1, la causa del error existe en el error.

Ejemplo de comunicación interproceso padre-hijo:

#include

#include

#include

#include

#include

#include

int main (int argc, char ** argv) {

if (argc < 2) {//Requiere la entrada de datos compartidos

printf (" ingrese los datos compartidos.n ");

exit (-1);

}

intshmid;

Shmid = shmget (0,1024, IPC_CREAT);

if (shmid == -1) {//No se pudo solicitar la memoria compartida

printf (" createhare memory failed.n ");

exit (-1);

}

if (fork ()) {//en los procesos primarios

char * p_shmaddr;

p_shmaddr = shmat (shmid, NULL, 0); //Asignación a una dirección en el proceso principal

memset (p_shmaddr, 0, 1024); //Inicializar memoria compartida

strcpy (p_shmaddr, argv [1]); //copie los datos compartidos en la memoria compartida

espere (NULL); //espere al final del proceso hijo

exit (0);

}

else {

sleep (2); //esperando que el proceso padre escriba los datos

char * c_shmaddr;

c_shmaddr = shmat (shmid, NULL, 0); //Asignar a una dirección en el proceso secundario, específicamente por el kernel

printf (" los datos que se encuentran son:% sn &​​quot;, c_shmaddr); //El proceso secundario genera los datos compartidos

exit (0);

}

}


Copyright © Conocimiento de Windows All Rights Reserved