Comment rendre la fonction de lecture de ne pas accrocher?
-
25-09-2019 - |
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
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.