Puoi usare un pty ("pseudo-telescrivente", dove una porta seriale è una "vera telescrivente") per questo. Da un'estremità, apri /dev/ptyp5
, quindi allega il tuo programma a /dev/ttyp5
; ttyp5
funzionerà proprio come una porta seriale, ma invierà/riceverà tutto ciò che fa tramite /dev/ptyp5.
Se ne hai davvero bisogno per parlare con un file chiamato /dev/ttys2
, quindi sposta semplicemente il tuo vecchio /dev/ttys2
fuori mano e creare un collegamento simbolico da ptyp5
a ttys2
.
Ovviamente puoi usare un numero diverso da ptyp5
. Forse scegline uno con un numero elevato per evitare duplicati, poiché anche tutti i tuoi terminali di accesso utilizzeranno pty.
Wikipedia ha di più su ptys:http://en.wikipedia.org/wiki/Pseudo_terminal
Usa socat per questo:
Ad esempio:
socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11
A complemento della risposta di @slonik.
Puoi testare socat per creare una porta seriale virtuale eseguendo la seguente procedura (testato su Ubuntu 12.04):
Apri un terminale (chiamiamolo Terminale 0) ed eseguilo:
socat -d -d pty,raw,echo=0 pty,raw,echo=0
Il codice precedente restituisce:
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]
Apri un altro terminale e scrivi (Terminale 1):
cat < /dev/pts/2
il nome della porta di questo comando può essere modificato in base al pc. dipende dall'output precedente.
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
dovresti utilizzare il numero disponibile nell'area evidenziata.
Apri un altro terminale e scrivi (Terminale 2):
echo "Test" > /dev/pts/3
Ora torna al Terminale 1 e vedrai la stringa "Test".