El sistema debe especificar un valor de ID al establecer la comunicación IPC (como la cola de mensajes y la memoria compartida). Usualmente, el valor de id es obtenido por la función ftok. El prototipo de ftok es el siguiente: key_t ftok (char * fname, int id) fname es el nombre del archivo que especifica (el archivo debe estar presente y accesible), id es la subsecuencia, aunque es int, pero solo se usan 8 bits (0-255). Cuando se ejecuta con éxito, se devolverá un valor de key_t, de lo contrario se devuelve -1. En una implementación típica de UNIX, se saca el número de nodo índice del archivo y el subnúmero se agrega al valor de retorno de key_t. Si el número de inodo del archivo especificado es 65538, se convierte a 0x010002 hexadecimal, y el valor de ID que especifica es 38, se convierte a 0x26 hexadecimal, el valor de retorno de key_t final es 0x26010002. archivo de consulta número de inodo de métodos son: ls -i Los siguientes procedimientos de ensayo: # include < stdio.h > # include < sys /types.h > # include < sys /ipc.h > #define IPCKEY 0x11int principal (void) {int i = 0; para (i = 1; i < 256; ++ i) printf (clave =% x \\ n ", ftok (" /tmp ", i)); return 0;}
Después de obtener la clave con éxito, puede usarla como el valor clave de la comunicación entre procesos de un determinado método, como la forma en que shmget comparte memoria.
El prototipo de la función de shmget es
int shmget (key_t, size_t, flag);
Después de que la creación se realiza correctamente, se devuelve el descriptor de la memoria compartida. El key_t utilizado en shmget es la
instancia generada por ftok:
#include < sys /shm.h > #include < stdio.h > #include < errno.h > # include < string.h > # include < stdlib.h >
#define TAMAÑO 1024
extern int errno;
int main () {int shmid; char * shmptr;
//Crear memoria compartida if ((shmid = shmget (IPC_PRIVATE, TAMAÑO, 0600)) < 0) {printf (" error de shmget:% s \\ n " , strerror (errno)); return -1;}
//Conectar la memoria compartida a una dirección disponible
if ((shmptr = (char *) shmat (shmid, 0, 0 )) == (void *) - 1) {printf (" error shmat:% s \\ n ", strerror (errno)); devolver -1;} memcpy (shmptr, " Hello World ", sizeof (" Hola mundo ")); printf (" compartir memoria de% lx a% lx, contenido:% s \\ n ", (sin signo largo) shmptr, (sin signo largo) (shmptr + TAMAÑO), shmptr);
//Eliminar la memoria compartida si ((shmctl (shmid, IPC_RMID, 0) < 0)) {printf (" error de shmctl:% s \\ n ", strerror (errno)); return -1;}} < Br>
multiproceso condiciones de memoria compartida:
# include < sys /shm.h > # include < stdio.h > # include < errno.h > # include < string.h > # include < stdlib. h > # include < unistd.h > # include < sys /types.h > # include < sys /wait.h >
#define TAMAÑO 1024
extern int errno;
int main () {int shmid; char * shmptr; key_t key; pid_t pid;
if ((pid = fork ()) < 0) {printf (" error de fork :% s \\ n ", strerror (errno)); return -1;} else if (pid == 0) {sleep (2); if ((key = ftok (" /dev /null ", 1)) < 0) {printf (" error ftok:% s \\ n ", strerror (errno)); devolver -1;} if ((shmid = shmget (clave, tamaño, 0600)) < 0) {printf ( " error de shmget:% s \\ n ", strerror (errno)); exit (-1);}
if ((shmptr = (char *) shmat (shmid, 0, 0)) == (void *) - 1) {printf (" error shmat:% s \\ n ", strerror (errno)); salida (-1);} //memcpy (shmptr, " Hello World ", sizeof (" Hola mundo ")); printf (" child: pid es% d, comparte memoria desde% lx a% lx, contenido:% s \\ n ", getpid (), (unsigned long) shmptr, (unsigned long) (shmptr + TAMAÑO), shmptr); printf (" proceso hijo sueño 2 segundos \\ n "); sueño (2); if ((shmctl (shmid, IPC_RMID, 0) < 0)) {printf (" error shmctl:% s \\ n ", strerror (errno)); salida (-1);} de salida ( 0);} //padre else {if ((key = ftok (" /dev /null ", 1)) < 0) {printf (" error de ftok:% s \\ n ", strerror (errno)); return -1;} if ((shmid = shmget (key, SIZE, 0600
Noticias de Computer Shop: ¿Recuerdas que Steam está listo para salir? Ahora hay nuevas noticias: es
El sistema operativo Linux es un sistema operativo de código abierto y libre que no solo es seguro,
De acuerdo con el blog de tecnología estadounidense TNW, el conocido proveedor de Linux Canonical la
Primero, el entorno: vmware workstaion 9.0 centos 6.2 iou-web Segundo, instalación 1. Instalac
Modo PASV de Vsftp (transferencia en modo pasivo) y modo de puerto
Tres métodos de consulta para el último tiempo de reinicio del sistema Linux
Conocimiento relacionado con el arranque del sistema Linux
Hablando sobre el reproductor multimedia en Linux (activado)
Modo de usuario único de Linux Suse para modificar la contraseña de root
Red Hat 9.0 configura el archivo Xmanager
Comandos de configuración de hardware de visualización de LINUX
Tutorial de configuración de variables de entorno de Shell Las variables de entorno de
Cómo hacer espacio en el disco C después de instalar el simulador Genymotion en el sistema Win7
Cómo configurar el color de la protección de la computadora del sistema win7 en verde
Meitu Xiuxiu revela que la segunda mitad del estudio es débil y clara.
Fácil de resolver el problema de la memoria virtual insuficiente en Windows
Win7 lanza el navegador IE abrirá automáticamente dos soluciones de página de inicio
Sistema Win10 página de descarga del navegador Edge solución ilegible
Evita molestar el volumen del programa libremente ajustable en Win7