Domanda

sto usando socat per creare una porta seriale virtuale con:

socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1

Il mio programma scritto in C ++, apro la porta ttySV1 e iniziare a leggere.

La funzione di lettura è da un po ', ma il problema è che si blocca funzione di lettura fino a che non inviano i dati al porto. Sapete come rendere la funzione taht di non appendere e appena uscita se non ci sono dati nel buffer?

EDIT: Ho inviare i dati alla porta utilizzando:

echo [data] > /dev/ttySV0
È stato utile?

Soluzione

Si potrebbe anche usare una funzione di sistema di lettura a seconda del sistema operativo in esecuzione. I dettagli dovrebbero essere sotto uomo (3) lettura.

Si dovrebbe set O_NONBLOCK utilizzando fnctl. Questo dovrebbe causare la lettura a fallire se il tubo / FIFO è vuoto. Ho controllato le pagine man di Linux, ma la loro dovrebbe essere comportamenti simili nella maggior parte dei sistemi POSIX.

Altri suggerimenti

Un modo è quello di utilizzare il metodo select () per vedere se ci sono dati da leggere. Questo o qualcos'altro trovato su google (ho cercato "bsd prese selezionare ") dovrebbe portare giù la strada giusta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top