Función MSYNC 2 C

Función MSYNC 2 C
¿Alguna vez ha oído hablar de alguna función utilizar y administrar la memoria de un sistema en Linux?? La función msync () es una de ellas. El método sincroniza el contenido del archivo con el contenido actual del área. Se ha conocido ampliamente entre los usuarios de Linux sincronizar la memoria con el almacenamiento físico de un sistema. Dentro de este artículo, explicaremos su sintaxis y uso. Para esto, pasaremos por cada uno de sus argumentos uno por uno.

Sintaxis:

#incluir
Int msync (void * addr, size_t len, int flags);

Addr: El inicio de las direcciones que desea sincronizar como un rango.

Len: El número de la longitud de las ubicaciones expresada en bytes.

Explicación:

Dentro de estas páginas completas que comprenden cualquier parte del espacio de direcciones del proceso, comenzando en la dirección de dirección y en ejecución para bytes de longitud, el método msync () debe escribir toda la información actualizada en áreas de almacenamiento persistentes. Msync () no debería tener un impacto si no hay tal memoria. El método msync () eliminará las copias de seguridad de la información almacenadas si es necesario. ADDR debe ser un múltiplo del número de páginas proporcionadas por la función sysconf () para que funcione la implementación.

El método msync (*) debe asegurarse de que todos los procesos de escritura estén terminados según sea necesario para la integridad de la seguridad de datos de E/S sincronizada para los asignaciones a los documentos. La implementación puede escribir opcionalmente características adicionales del archivo, aunque esto no está definido. Cualquier datos actualizados no debe transferirse al objeto central o estar disponible gratuitamente para ciertas otras operaciones siempre que el método msync () se realice a las traducciones map_private. No se sabe dónde se almacena permanentemente la información en MAP_Private. [Shm | tym] [start] msync () no especifica si afecta los objetos de memoria compartidos o los objetos de almacenamiento escrito.

Fin de la opción: si no se usó una solicitud para el mapa para crear la traducción, la funcionalidad de este método está indefinida.

Opciones de bandera disponibles para msync ()

El parámetro de opciones está compuesto por el bitwise-inclusive o de varias banderas enumeradas a continuación que se especifican en el archivo de encabezado "SYS/MMAN.H ":

  • Ms_async: Llevar a cabo la escritura simultánea
  • Ms_invalidate: Mapeos inexactos
  • Ms_sync: Llevar a cabo la escritura simultánea
  • Ms_cache_only: Dado que QNX Neutrino actualmente admite la compatibilidad de POSIX para los documentos mapeados de memoria, MSync () lleva a cabo su propósito deseado de escribir modificaciones en la memoria traducida al archivo real. MS CACHE SOLO (adición de neutrinos QNX; QNX Neutrino Core OS 6.3.2 o superior). Si prefiere la adición de Neutrino QNX al comportamiento estándar POSIX, use este bit para instruir el método para enjuagar o saturar el caché de datos (a través de los indicadores de MS Async, MS Sync o MS Invaliding).
  • Si está cambiando dinámicamente el código, use la extensión de neutrino QNX MS Invalidate Icache para asegurarse de que el código actualizado sea lo que se ejecuta.
  • Solo trabaje en páginas limpias con la extensión de neutrinos QNX MS_CLEAN (Versión 7.0 o posterior).

Antes de la solicitud, todos los enlaces de escritura a la memoria del sistema eran accesibles para los procesos de lectura posteriores en el documento. No está claro si los punteros de lectura al área de almacenamiento pueden acceder a las modificaciones a la misma área del documento que se realizó incluso antes de la solicitud. Si las páginas inalteradas dentro del rango particular se escriben adicionalmente en el hardware fundamental, esto no se menciona. Cuando se programan todos los procesos de escritura, el método puede responder de inmediato si el indicador es MS_ASYNC. Cuando las banderas son ms_sync, el método de alguna manera no regresa a menos que todos los procesos de escritura estén terminados.

Al sincronizar los datos de la región de almacenamiento con la información existente almacenada, MS_InValidate los hace coincidir. Los accesos de lectura sucesivos al área de almacenamiento vinculada pueden ver todas las escrituras en el área traducida del documento que se realizó incluso antes de la solicitud. No está claro si los punteros de lectura a las áreas de almacenamiento que se tradujeron a la misma área del documento utilizando el map_shared incluso antes de llamar a través de cualquier función podrían ver el área. Las columnas ST_CTIME y ST_MTIME del archivo se marcan para actualizar si el uso de la función msync () da como resultado cualquier operación de escritura realizada en el directorio.

Valor devuelto:

  • La función msync () produce 0 si se completa.
  • Msync () salidas de la función -1 y asigna un error a uno de los siguientes parámetros de error si falla.

Uso de la aplicación:

El método msync () no tiene que ser accesible en todas las variantes, ya que solo está permitido si se proporcionan los documentos mapeados de almacenamiento y las opciones entrantes y salientes coordinadas. Las aplicaciones que necesitan que un objeto de almacenamiento esté en una posición definida, como las que proporcionan instalaciones de transacción, deben utilizar el método msync (). Las páginas pueden transferirse al disco durante la actividad del sistema de rutina.

No hay certeza de que msync () parece ser el único factor que influye en si las páginas se transfieren o no al disco. El método msync () envía los datos de un área asignada al almacenamiento persistente de la entidad base. La solicitud de los datos del documento se garantiza mediante la solicitud a MSYNC (). Si de alguna manera se proporcionó el indicador MS_InValidate, cualquier datos almacenados puede expirarse cuando se ingresan los datos. En las plataformas que no proporcionan integridad de lectura/escritura, esto es útil.

Ejemplo:

Creamos un nuevo archivo C usando la instrucción VIM en el shell. Se crea dentro de la carpeta Project1 de nuestro sistema Kali Linux según la salida de la instrucción "LS" de la lista en la siguiente imagen, I.mi. "Mysync.C".

Para abrir este archivo, utilizamos el editor VIM según la siguiente instrucción:

El archivo vacío se abre dentro del editor VIM de nuestro sistema. Primero agregamos los encabezados necesarios en este archivo de código. El stdio.H, unistd.h, y cadena.H se utilizan para obtener la entrada y la salida estándar. Mientras que el uso de "sys/mman.H ”y fcntl.H se utilizan para utilizar la función y archivos msync () en el código. La función main () inicializa el valor del descriptor de archivo a -1 y obtiene el tamaño de la página utilizando la función getPageSize (). Abrimos el "Newfile.archivo txt "dentro del modo de lectura y escritura. Si no hay archivo con este nombre, la opción "O_Create" crea uno nuevo.

El valor devuelto se almacena en el descriptor del archivo y la instrucción "si" lo utiliza para ver si el valor es inferior a 0 o no. Si es así, imprimirá que la "apertura de archivo falló". El puntero MAP_Address se usa para asignar la dirección de un archivo y si falla, la instrucción "Si" imprimirá el mensaje de error respectivo. La función strcpy () está aquí para copiar una cadena a una variable map_address y la instrucción "if-else" usa la función msync () para sincronizar la memoria asignada al archivo y mostrar la salida respectiva, i i.mi. Falló o tuvo éxito.

Compilamos este archivo C con el compilador GCC y creamos su archivo de objeto. Luego, ejecutamos su archivo de objeto y recibimos el mensaje de que la memoria asignada se ha sincronizado con éxito al archivo.

Conclusión

Esto se trata del uso de la función msync () 2 de C en nuestro sistema. Discutimos su sintaxis junto con su parámetro, por separado. También discutimos las opciones utilizadas dentro y los errores que podemos obtener de su falla. Agregamos un ejemplo detallado para explicar su uso en el lenguaje de programación C.