Question

J'utilise socat pour créer un port série virtuel avec:

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

dans mon programme écrit en C ++, j'ouvre le port ttySV1 et commencer à lire.

La fonction de lecture est dans un certain temps, mais le problème est que la fonction de lecture est suspendue jusqu'à ce que j'envoie des données au port. Savez-vous comment faire la fonction taht ne pas accrocher et juste sortie s'il n'y a pas de données dans la mémoire tampon?

EDIT: j'envoyer des données au port en utilisant:

echo [data] > /dev/ttySV0
Était-ce utile?

La solution

Vous pouvez également utiliser un système fonction de lecture en fonction du système d'exploitation que vous utilisez. Les détails devraient être sous l'homme (3) lire.

Vous devez définir O_NONBLOCK en utilisant fnctl. Cela devrait entraîner votre lecture à l'échec si le tuyau / FIFO est actuellement vide. J'ai vérifié les pages de manuel pour Linux mais leur devrait être des comportements similaires dans la plupart des systèmes à base de POSIX.

Autres conseils

La première consiste à utiliser la méthode select () pour voir s'il y a des données à lire. Cette ou autre chose trouvé sur Google (je recherchais « bsd prises select ") devrait vous conduire sur le droit chemin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top