Puede usar un pty ("pseudo-teletipo", donde un puerto serie es un "teletipo real") para esto. Desde un extremo, abre /dev/ptyp5
y luego adjunte su programa a /dev/ttyp5
; ttyp5
actuará como un puerto serie, pero enviará/recibirá todo lo que haga a través de /dev/ptyp5.
Si realmente lo necesita para hablar con un archivo llamado /dev/ttys2
, simplemente mueva su antiguo /dev/ttys2
fuera del camino y haga un enlace simbólico desde ptyp5
a ttys2
.
Por supuesto, puedes usar algún número que no sea ptyp5
. Tal vez elija uno con un número alto para evitar duplicados, ya que todos sus terminales de inicio de sesión también usarán ptys.
Wikipedia tiene más información sobre ptys:http://en.wikipedia.org/wiki/Pseudo_terminal
Usa socat para esto:
Por ejemplo:
socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11
Complementando la respuesta de @slonik.
Puede probar socat para crear un puerto serie virtual realizando el siguiente procedimiento (probado en Ubuntu 12.04):
Abra una terminal (llamémosla Terminal 0) y ejecútela:
socat -d -d pty,raw,echo=0 pty,raw,echo=0
El código anterior devuelve:
2013/11/01 13:47:27 socat[2506] N PTY is /dev/pts/2
2013/11/01 13:47:27 socat[2506] N PTY is /dev/pts/3
2013/11/01 13:47:27 socat[2506] N starting data transfer loop with FDs [3,3] and [5,5]
Abre otra terminal y escribe (Terminal 1):
cat < /dev/pts/2
El nombre del puerto de este comando se puede cambiar de acuerdo con la PC. depende de la salida anterior.
2013/11/01 13:47:27 socat[2506] N PTY is /dev/pts/**2**
2013/11/01 13:47:27 socat[2506] N PTY is /dev/pts/**3**
2013/11/01 13:47:27 socat[2506] N starting data transfer loop with FDs
debe usar el número disponible en el área resaltada.
Abre otra terminal y escribe (Terminal 2):
echo "Test" > /dev/pts/3
Ahora regrese a la Terminal 1 y verá la cadena "Prueba".