Entra uno, salen n

Dice una maldición china: ojalá te toque vivir tiempos interesantes, y en realidad no tengo claro que sea una maldición.

El otro día Rubén acudió a mi con un problema. Resulta que mantiene una estación meteorológica en el cabo de Santa Pola, todo con Software Libre y Linux, y el soft que usa recoge los datos por el puerto serie de un PC.

Le han pedido que pruebe otro soft, pero solo cuenta con una estación y debe seguir funcionando correctamente. Solución: que los datos de la estación se lean por los dos programas.

El primer apaño que no funcionó fue emplear tee(1), y probablemente porque la cosa no era tan fácil :). El programa tee es potente, pero no está diseñado para lo que necesitaba Rubén (filosofía UNIX, hacer una sola cosa, pero hacerla bien).

Le propusieron en pseudocódigo dos soluciones, una con mkfifo(3) y la otra con popen(3). Pero Rubén no anda muy puesto... así que la maldición hizo el resto.

He optado por emplear mkfifo(3). Se indica un fichero de entrada y se crean n FIFO (una tubería con nombre), de forma que mi programa lee de la estación y, si hay alguien esperando a leer en un FIFO, le copia lo leído.

El principal problema es que todos estos ingenios son bloqueantes, si abres un FIFO, tu proceso de bloquea hasta que alguien en el otro lado está listo para leer. Además hay problemas si escribes y no hay nadie al otro lado :D. Estas dos características son malas cuando tienes que proporcionar datos a varios lectores y uno de ellos puede fallar.

Lo he solucionado creando los FIFO no bloqueantes, pese a no tener claras todas las consecuencias, y empleando select(2) para estar seguro que hay alguien esperando antes de escribir. La consecuencia es que el que no esté atento perderá datos, pero no perjudicará al resto de lectores.

No sé si he hecho alguna burrada, pero Rubén dice que por ahora funciona, así que... De todas formas el programa es libre: repfile. Si alguien lo ojea y ve algo raro, que avise.

Dice una maldición china: ojalá te toque programar programas interesantes, y en realidad no tengo claro que sea una maldición.


Publicidad

Aviso: Los siguientes comentarios pertenecen a las personas que los han enviado.
El administrador de este sitio web no es responsable de los mismos.

[comentarios] Hay 2 comentarios:

Gravatar
07/02/2006 18:16:06
Y funciona :)
por Ruben (IP: 84.120.168.*)
Comentario de Ruben
Doy fe de que funciona...y correctamente :)
He creado dos fifos.
En uno de ellos esta funcionando wx200d y en el otro una maquina virtual vmware.
Llevo meses detras de solucionar este problema y al fin parece verse la luz :)

Gracias Juanjo.
Gravatar
07/02/2006 18:34:51
Un placer
por Juanjo (IP: 192.168.0.*)
Comentario de Juanjo
Lo he programado en un ratillo :D. Lo único que la he liado porque pensaba hacer 2 FIFO y al final lo he programado para n (toma cha!).

Me alegro que funcione :D

! Esta entrada no permite nuevos comentarios.

Los comentarios se bloquean automáticamente tras 15 días desde la publicación del artículo.

Si deseas comentar algo relacionado con el texto, puedes enviarme un e-mail.