Al usar las API seriales de estilo Unix en cualquiera de Linux de Cygwin, deberías poder leer desde dos puertos seriales en el mismo programa.
Una forma en que podría hacer esto sería configurar los dos puertos en modo no bloqueante, de modo que la llamada read () devuelva 0 si no hay datos disponibles, lo que le permitiría encuestar a los dos en un bucle: aunque eso puede desperdiciar innecesariamente la CPU.
Otro método es usar select () con una lista de ambos descriptores de archivos, para bloquear hasta que cualquiera de los dos tenga datos; luego, tome los datos de ese, y llame a select () nuevamente para esperar hasta que haya algo disponible de nuevo .
Pero tenga en cuenta que los mensajes pueden provenir o no de los dos en partes completas que pueden intercalarse de manera trivial, por lo que es posible que necesite un poco de búfer y lógica de software por puerto para conservar los bytes recibidos desde varios select () / read ( ) ciclos hasta que obtenga una línea completa o un registro que tenga sentido imprimir, lo cual se intercalará bien con los fragmentos completos de la otra.