Bonjour,

Je cherche a comprendre comment inserer un timeout dans mon programme.

Ce programme utilise une structure termios pour aller lire en mode non canonique caractère par caractère ce qui passe sur mon port série via un read(). Je veux donc ajouter une verification de timeout entre la lecture de chaque caractère.

- Voici mon ouverture et configuration du port série :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  fd = open(PORT, O_RDWR | O_NOCTTY);
  if (fd <0) {perror(PORT); exit(-1); } 
 
  /* Lecture des parametres courants */
  tcgetattr(fd,&termios_p);
  /* On ignore les BREAK et les caracteres avec erreurs de parite */
  termios_p.c_iflag = IGNBRK | IGNPAR;
  /* Pas de mode de sortie particulier */
  termios_p.c_oflag = 0;
  /* Liaison a 9600 bps avec 8 bits de donnees et une parite paire */
  termios_p.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
  /* Mode non-canonique avec echo */
  termios_p.c_lflag = ECHO;
  /* Caractères immediatement disponibles */
  termios_p.c_cc[VMIN] = 1;
  termios_p.c_cc[VTIME] = 0;
  /* Sauvegarde des nouveaux parametres */
  tcsetattr(fd,TCSANOW,&termios_p);
Si j'ai bien compris je crois qu'il faut que je passe une valeur à termios_p.c_cc[VTIME] en ms, qui sera mon timeout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
termios_p.c_cc[VTIME]=10  //par exemple 10ms

- Et voici la lecture des caractères en simplifié :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    while(c!=0x0a) {
      /* Récupère un caractère */
      read(fd, &c, 1);
      printf("%c\n",c);
    }
Ici je pense qu'il faut que je test le retour du read et qu'en fonction de celui-ci je traite le résultat.



Voilà j'ai donc quelques idées mais je n'y arrive pas, je ne sais pas trop comment m'y prendre.

Merci d'avance de votre aide !