Tecnología

Inicio

Lo UNIX programas del sistema operativo se utilizan para crear canalizaciones con nombre?

Lo UNIX programas del sistema operativo se utilizan para crear canalizaciones con nombre?


En el sistema operativo Unix, un tubo es un dispositivo de sistema lógico que se comunica entre dos procesos de Unix. Desde hace transfiere datos de tubería entre dos procesos en un Primero en entrar, primero en salir, que son llamados también tuberías FIFO. Hay dos tipos de tuberías en Unix - con nombre y tuberías sin nombre. Ellos son los mismos en el comportamiento y la semántica excepción de que las canalizaciones con nombre tienen un nombre y una entrada en el directorio, como un archivo. Las canalizaciones con nombre ofrecen la ventaja de la seguridad con permisos de lectura y escritura, así como la protección automática por el sistema cuando son compartidos por muchos procesos.

Crear una tubería con nombre En la línea de comandos

Los programas "mknod" y "mkfifo" crean una tubería con nombre en el intérprete de comandos. La primera letra de la entrada es "p", lo que indica que el dispositivo es un tubo. "0666" es el modo utilizado, que se modifica utilizando el valor actual de umask. Ejecutar el programa de "hombre" para las entradas manuales detallados sobre "mknod" y "mkfifo" en su sistema. "Mknod" es un comando genérico para todos los tipos de dispositivos.

$ Mknod nmpipe_multiway p
O
$ Mkfifo nmpipe_multiway 0666

Ver el tubo como un listado de directorios:
$ Ls -l

Crear una canalización con nombre en un programa C

Llamar al Unix función del sistema mkfifo () para crear la canalización con nombre en un programa.
El primer parámetro es el nombre de la tubería y la ruta de acceso a la misma. "Modo" especifica los permisos de acceso con el que desea crear la canalización con nombre. La función asume el O_CREATE | banderas O_EXCL, lo que significa que dará un error si la tubería ya existe. Un valor de retorno de cero indica que la tubería se ha creado correctamente.

El prototipo de la función es: int mkfifo (const ruta char *, modo mode_t);

Abrir la canalización con nombre

Llame a la función del sistema Unix abierta () o el estándar C fopen función de biblioteca () para abrir una canalización con nombre como de sólo lectura, escritura o de lectura y escritura, de acuerdo con el parámetro transmite el programa. Por el contrario, las tuberías sin nombre se crean utilizando la llamada tubería (). El comportamiento de la función open () es el mismo para todos los dispositivos, incluidos los archivos. Cuando tiene éxito, abierta () devuelve un descriptor de dispositivo y fopen () devuelve el puntero a la estructura de la biblioteca C "archivo". Varios procesos pueden leer y escribir en la canalización con nombre. Si un proceso se abre el tubo para la lectura, duerme hasta que otro proceso abre el mismo tubo para la escritura y viceversa. El núcleo de Unix, o núcleo, despierta el proceso de dormir tan pronto como se produzca el evento esperado.

Leer-Escribir en FIFO

Llamar a las funciones read () y write () para leer y escribir en las canalizaciones con nombre. Con tubos, el concepto FIFO es similar a la escritura un proceso a un extremo de la tubería y otro proceso de lectura de el otro extremo. El número de los procesos de lectura puede no ser igual al número de los procesos de escritura. Si más de un proceso lee o escribe, los procesos de coordinar las operaciones usando los algoritmos multitarea en Unix. Los datos del kernel Unix trata de una tubería, ya que tratarían a los datos de archivo. En el caso de una tubería con nombre, el modo en el que se abrió hace cumplir requiere seguridad. Además, las canalizaciones con nombre están protegidos de forma automática cuando se comparte entre varios procesos: La sincronización para mantener la integridad de los datos cae sobre el hombro del programador Si las tuberías sin nombre.

La gestión de tuberías llenas o vacías

Si un proceso intenta escribir datos en un tubo y no hay espacio, el núcleo pone el proceso de dormir hasta que el tubo escribe los datos a almacenamiento físico. Del mismo modo, un intento de leer un tubo vacío pone el proceso a dormir hasta que otro proceso escribe datos en la conexión. En estos casos, las golosinas núcleo llamado y tuberías sin nombre por igual.

Cerrar una canalización con nombre

Llame a la función del sistema close () o estándar C función fclose () para cerrar una tubería con nombre. El cierre de una tubería con nombre es el mismo como el cierre de un archivo, excepto que el núcleo sigue un procedimiento especial antes de liberar los recursos ocupados por la tubería. Si los procesos de dormir están esperando para leer la tubería, el núcleo de Unix los despierta y se conviertan de la función de lectura () sin ningún dato. Si no hay procesos de lectura en esta tubería y algunos procesos están durmiendo en escritura, el núcleo de los despierta y regresan sin escribir. Mientras que el cierre de una tubería con nombre, el núcleo lo trata como un tubo sin nombre de la coherencia.