La comunicación puede ocurrir entre los sistemas que están conectados o no relacionados, como todos sabemos. El método de llamada del sistema SHMGet se utiliza para establecer un nuevo segmento de memoria compartida o localizar uno existente utilizando una clave. Los segmentos de memoria compartidos son secciones de memoria a las que pueden acceder varios procesos y que, una vez establecidos, permanecen disponibles hasta que se destruyen explícitamente con la función SHMCTL. Este artículo le mostrará cómo usar la función de llamada del sistema SHMGet en el lenguaje C para asignar la memoria compartida de varias maneras.
Sintaxis de la función de llamada del sistema SHMGet en el lenguaje C
int shmget (tecla key_t, size_t size, int shmflg);
Aquí, tenemos una sintaxis general de la función de llamada del sistema SHMGet. Hay diferentes parámetros pasados en la función shmget. Estos parámetros se explican en detalle en la siguiente discusión.
Shmget () devuelve el valor de la clave de parámetro que devuelve el segmento de memoria compartida de identificación del sistema v. Si la clave es IPC privada o no privada de IPC, no existe un segmento de memoria de memoria compartida de la clave, y el IPC Create se define en SHMFLG, una nueva segmentación de memoria compartida con un tamaño equivalente al valor del tamaño escalado hasta múltiples Se produce el tamaño de la página. (Esto es similar al efecto abierto (2) de O create | o excl).
El tamaño necesario del segmento se especifica mediante el argumento de tamaño. Si el segmento ocurre actualmente, el tamaño no puede exceder el tamaño proporcionado cuando se creó. Además, para definir qué usuarios están autorizados para acceder o cambiar el segmento de memoria, cualquiera de los bits de autoridad S IRUSR, S IWUSR, S IRGRP, S IWGRP, S IROTH Y S IWOTH puede suministrarse.
Ejemplo
El código de ejemplo muestra cómo usar las funciones de llamadas del sistema SHMGet y Shmat en un solo proceso para crear un nuevo segmento compartido y luego escribir algún texto en él. El código de muestra también muestra que los múltiples procesos pueden transmitir utilizando la memoria colectiva.
#incluirPrimero, incluimos algunos archivos de encabezado aplicables. La capacidad de memoria compartida se define en el "SYS/SHM.H ”Archivo de encabezado. Comience con la implementación del código. Definimos el tamaño del segmento utilizando el método enum. La variable se declara como los datos donde se inicializa la cadena. Entonces, tenemos la llamada de función principal. En la función principal de este ejemplo, las variables se definen e inicializan. El Segement_ID se inicializa con el método shmget. La clave del segmento de memoria es el primero de los tres argumentos pasados al método SHMGet. Si se requiere un nuevo segmento, el valor clave puede ser la macro privada IPC o el valor clave de un segmento existente si la llamada necesita obtener la identificación de la memoria.
El tamaño del segmento se especifica mediante el segundo argumento y los indicadores de permiso, que pueden ser o que se acumulan para agregar valores posibles, se especifican mediante el tercer argumento de SHMGet.
El identificador del segmento se recibe después de que se forme el segmento de memoria, y luego se puede enviar a la función SHMAT para conectar el segmento de memoria. Como segunda entrada a SHMAT, el usuario puede especificar la dirección donde se debe conectar el segmento de memoria. Aún así, es más común permitir que el núcleo determine la dirección y use nulo para indicar que. La función printf imprime el valor de ID de segmento y la memoria compartida adjunta e imprime la cadena "Hey, allí".
Se generan las horquillas de "PID_T" del proceso primario y un proceso infantil "Child_pid", cada uno de los cuales guarda una cadena distinta en la misma dirección. Mientras tanto, el proceso principal se detiene y espera a que el niño termine y luego se va con un código exitoso. La cadena recién guardada se escribe en la consola. Si muchos procesos deben alterar y adquirir los segmentos de memoria compartida al mismo tiempo, se deben utilizar técnicas de sincronización como semáforos.
La ejecución del código anterior genera una salida como esta. Se genera la ID del segmento, se muestra la dirección de memoria compartida y la cadena también se imprime en el aviso. El PID infantil y el estado del niño salen junto con el mensaje, "Nuevos datos en el proceso infantil".
Conclusión
Pasamos la función de llamada del sistema SHMGet con gran detalle en esta publicación. La función shmget () recupera la identificación de memoria compartida de la clave. A través de la función de llamada del sistema SHMGet, podemos obtener la memoria compartida. Antes de que podamos usar la función shmget (), necesitamos importar muchas bibliotecas. Esta función contiene los parámetros que controlan una variedad de funciones. Esta publicación lo ayuda a mejorar sus habilidades de programación y abordar los problemas que puede haber tenido sobre la función de llamada del sistema SHMGet.