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 ", c_shmaddr); //El proceso secundario genera los datos compartidos
exit (0);
}
}
I. Descripción general: Agregar un programa al kernel de Linux requiere las siguientes tres tareas
win7 Hay muchos trucos. Si lo usas bien, puedes hacer que el sistema win7 obtenga una pequeña opt
Varios archivos de inicio Agregar varios archivos de inicio diciendo que la compilación será incor
Frente al poderoso Microsoft y NetWare, se puede decir que el sistema operativo de servidor Linux es
Administración y mantenimiento del sistema Linux -wget command
Cómo deshabilitar el inicio de sesión de la cuenta ROOT en Linux
Instalación del sistema dual 2000 y Linux
Escaneo de hardware y carga de la unidad General Flow
Linux enlaces duros y enlaces blandos comprensión profunda
Hablando del problema de partición del sistema Linux
Análisis de herramientas de software de PCB bajo Linux
Cómo utilizar el paquete de archivos comprimidos Rar del sistema operativo Linux
Seguridad mejorada Devil Linux 1.6.1 lanzado
¿Cómo usar el comando netstat para ver los ataques DDOS en Linux?
Versión de vista previa de Windows 10 10159 ¿Cómo cambiar el navegador predeterminado?
¿Cómo resolver el fallo repentino de la computadora causado por el archivo de copia de disco de u?
Win8.1 utiliza el método de agregar funciones a Windows 8.1
Cómo Linux implementa el control remoto de los comandos de shell
Inicie sesión en el sistema como cuenta del sistema para eliminar archivos
Cómo encontrar el panel de fecha y hora oculto en Win10
Encuentre rápidamente la contraseña de inicio de sesión olvidada de Win7
Un tutorial detallado sobre cómo abrir la función de aumento Win8
Análisis y solución del error PatchExpLib.dll en el sistema XP
¿Cómo puedo resolver el problema de que Win7 no puede instalar el control ActiveX?