Tuberías CI-2400 Programación Avanzada en Sistemas de Tipo UNIX Prof. Braulio José Solano Rojas ECCI, UCR Tuberías ● ● Las tuberías son uno de los primeros mecanismos que se implantaron en UNIX para la comunicación entre procesos. De hecho, algunos sistemas monoproceso, como por ejemplo DOS permiten en la línea de comandos la utilización de tuberías. 2 de 16 Tuberías anónimas ● ● Las tuberías anónimas se crean con la función pipe y solamente el proceso creador y sus descendientes pueden utilizarlas. int pipe(int fildes[2]); Vamos a poder utilizar la tubería por medio del arreglo fildes. Al escribir en fildes[1] se introducen datos en la tubería y al leer de fildes[0] se leen datos de la tubería. La tubería se trata como un archivo por lo que tendrá un inode. 3 de 16 Comunicación bidireccional ● ● ● Uno de los problemas que presenta utilizar una única tubería es la falta de comunicación entre el hijo y el padre. Podríamos creer que podemos utilizar una única tubería para la comunicación bidireccional pero nos veríamos con problemas de sincronización. Por lo tanto, lo mejor es valernos de dos tuberías. 4 de 16 Tuberías en los intérpretes de comandos ● ● ● Todos los intérpretes de comandos ofrecen la posibilidad de redirigir tanto la entrada como la salida de la ejecución de un programa. Mediante las tuberías conseguimos que la salida de un programa se convierta en la entrada de otro. Ejemplo, listado de directorio en orden reverso: $ ls | sort -r 5 de 16 Tuberías en los intérpretes de comandos ● Para formar parte de una tubería tal y como las manejan los shell se han de cumplir dos requisitos. ● ● La entrada de datos al programa se debe realizar a través del archivo estándar de entrada (descriptor de archivo número 0). La salida de datos se debe realizar a través del archivo estándar de salida (descriptor de archivo número 1). 6 de 16 Tuberías con nombre (FIFO) ● ● Para los procesos que no guardan ninguna relación de parentesco se debe recurrir a las tuberías con nombre o fifo. Un fifo es un archivo con la misma semántica que una tubería anónima, pero ocupa una entrada en un directoria y se accede a el por medio de un path. 7 de 16 Tuberías con nombre (FIFO) ● ● ● El comportamiento de un archivo fifo es un tanto diferente a un archivo ordinario. Cuando se abre un fifo para escritura el proceso se pone a dormir hasta que no haya otro proceso que lo abra para lectura y viceversa. Para los fifo el kernel solamente utiliza las direcciones de bloques directas del inode, por lo que la cantidad de datos es limitada. 8 de 16 Tuberías con nombre (FIFO) ● ● El kernel maneja dos punteros al fifo uno de lectura y otro de escritura, además las direcciones directas son consideradas como una lista circular. Para poder abrir un fifo este debe existir a priori. 9 de 16 Creación de fifo ● Ejemplo, creación de fifo_1: ● Método 1: $ mknod fifo_1 p ● Método 2: if (mknod("fifo_1", S_IFIFO | permisos, 0) == -1) { /* Error al crear el fifo. */ } 10 de 16 Creación de fifo ● FreeBSD ● ● Solaris ● ● mkfifo [-m] nombretuberia mkfifo [-m] nombretuberia Linux ● ● mknod nombretuberia p mkfifo [-m] nombretuberia 11 de 16 Comunicación full-duplex ● ● En los casos anteriores la comunicación ha sido half-duplex. Tres técnicas van a permitir este tipo de comunicación: ● ● ● Polling o interrogación periódica. Lectura conducida por eventos. Multiplexación mediante select. 12 de 16 Interrogación periódica ● ● ● Consiste en hacer un recorrido periódico interrogando sobre las distintas fuentes. Deben haber funciones que indiquen el estado de las fuentes. En el caso de los fifo, al no haber este tipo de funciones se interroga leyendo. Para no tener bloqueo se utiliza el flag O_NDELAY o se activa utilizando fcntl. 13 de 16 Lectura conducida por eventos ● Habrá un proceso por origen de datos. El proceso principal estará detenido todo el tiempo y solamente cuando alguno de sus hijos asociados a los orígenes de datos le comuniquen un evento, tomará el control y leerá del dispositivo correspondiente. 14 de 16 Referencias ● ● Introduction to Named Pipes – Linux Journal The lost art of named pipes – TechTarget ¡Gracias por su atención! ¿Preguntas?