Я читаю байты из последовательного порта в С++, используя файловый дескриптор и функцию posix/unix read(). В этом примере я читаю 1 байт из последовательного порта (настройки скорости передачи и аналогичные для ясности опущены):
#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;
}
Если устройство, подключенное к /dev/ttyS 0, не отправляет какую-либо информацию, программа зависает. Как установить тайм-аут?
Я попытался установить тайм-аут следующим образом:
struct termios options;
tcgetattr(fd, &options);
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
tcsetattr(fd, TCSANOW, &options);
Я думал, что он должен дать 1 секунда тайм-аута, но это не имеет значения. Я думаю, что неправильно понял VMIN и VTIME. Для чего используются VMIN и VTIME?
Затем я просмотрел веб-сайт и нашел, что кто-то говорит о функции select(). Это решение, и если да, то как можно применить это к программе выше, чтобы сделать 1-й тайм-аут?
Любая помощь приветствуется. Заранее спасибо: -)