Port Série sous Linux: le Blocage de Lecture avec Temporisation

J'ai étudié de nombreux threads et des tutoriels, mais je suis toujours avoir des problèmes avec quelque chose qui devrait être très simple. Pour référence, voici quelques discussions que j'ai lu:

Comment mettre en œuvre un délai d'attente de lecture de l'appel de fonction?

comment faire pour ouvrir, lire, et écrire à partir du port série en C

En tout cas, j'ai un peu un problème. Mon code fonctionne très bien si je recevoir des données. Si je ne le fais pas, read() la fonction stands et la seule façon de sortir de mon programme est à utiliser kill -9 (NOTE: j'utilise de traitement de signal pour signal au fil de la lecture de la série de données à la fin. Ce n'est pas le coupable, read() appel encore étals même si j'ai enlevé mon traitement du signal). Ce que j'essaie de faire est de lire que les blocs et lit un morceau à la fois (donc économie d'utilisation de l'UC), cependant si la lecture ne reçoit pas de données, je wan-il pas de délai d'attente.

Voici les paramètres que j'ai demandé à le port:

struct termios serial_struct;
serial_struct.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
serial_struct.c_iflag = IGNPAR;
serial_struct.c_oflag = 0;
serial_struct.c_lflag = 0;
serial_struct.c_cc[VTIME] = 1;  //timeout after .1s that isn't working
serial_struct.c_cc[VMIN] = 64;  //want to read a chunk of 64 bytes at a given time

Je puis définissez ces paramètres avec tcsetattr() et vérifiez que le port a reçu les réglages via tcgetattr(). Je pense que mes paramètres peuvent être contradictoires, parce que mon lit semble être de blocage et d'attendre jusqu'à 64 octets reçus, mais ne font rien en ce qui concerne le délai d'attente. Je comprends que je peux utiliser select() pour faire face à un délai d'attente, mais je suis en espérant éviter les multiples appels système.

Comme toujours, merci d'avance pour l'aide.

Q: qu'est-Ce que le périphérique (par exemple /dev/ttyS0)? Qu'est-ce que l'appareil sur ce port (RS232 port COM? Quelque chose d'autre?) AUSSI: c'est un excellent lien, si vous n'êtes pas déjà familier avec elle: tldp.org/HOWTO/Serial-Programming-HOWTO. Vous êtes probablement intéressé à la "asynchronous I/O" de pièces.

OriginalL'auteur It'sPete | 2013-08-06