¿Cómo hacer que la función de lectura no se cuelgue?
-
25-09-2019 - |
Pregunta
Estoy usando socat para crear un puerto serie virtual con:
socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1
En mi programa escrito en C++, abro el puerto ttySV1 y empiezo a leer.
La función de lectura está en un tiempo, pero el problema es que la función de lectura se cuelga hasta que envío datos al puerto.¿Sabe cómo hacer que la función taht no se cuelgue y simplemente salga si no hay datos en el búfer?
EDITAR:Envío datos al puerto usando:
echo [data] > /dev/ttySV0
Solución
También puede utilizar una función de lectura del sistema según el sistema operativo que esté ejecutando.Los detalles deben leerse en man (3).
Tendrías que configurar O_NONBLOCK usando fnctl.Esto debería provocar que la lectura falle si la tubería/FIFO está actualmente vacía.Revisé las páginas de manual de Linux, pero deberían tener comportamientos similares en la mayoría de los sistemas basados en POSIX.
Otros consejos
Una forma es utilizar el método de selección () para ver si hay datos para leer. Este o algo más se encuentran en Google (Busqué "bsd zócalos seleccionar ") le llevará por el camino correcto.