Je lis des octets depuis un port série en C++ en utilisant un descripteur de fichier et la fonction posix/unix read(). Dans cet exemple, je lis 1 octet depuis le port série (les paramètres de vitesse de transmission et autres sont omis pour plus de clarté) :
#include <termios.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
char buf[1];
int bytesRead = read(fd, buf, 1);
close(fd);
return 0;
}
Si le périphérique connecté à /dev/ttyS0 n'envoie aucune information, le programme se bloque. Comment puis-je définir un délai d'attente ?
J'ai essayé de mettre un temps mort comme ça :
struct termios options;
tcgetattr(fd, &options);
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
tcsetattr(fd, TCSANOW, &options);
Je pensais qu'il était censé donner un délai d'une seconde, mais cela ne fait aucune différence. Je pense avoir mal compris VMIN et VTIME. À quoi servent VMIN et VTIME ?
Puis j'ai cherché sur le web et j'ai trouvé quelqu'un qui parlait de la fonction select(). Est-ce la solution et si oui, comment l'appliquer au programme ci-dessus pour faire un timeout de 1 seconde ?
Toute aide est appréciée. Merci d'avance :-)