Есть serial устройство - скорость работы 9600. От устройства приходят данные в пакетах разной динный Если работать так :
int fd;
struct termios oldtio, newtio;
fd = open(DEVICE, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);fcntl(fd, F_SETFL,0);
struct termios attr;
tcgetattr(fd, &attr);
attr.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
attr.c_lflag &= ~ICANON | ~ISIG ;
attr.c_cc[VMIN] = 0;
attr.c_cc[VTIME] = 1;
tcsetattr(fd, TCSANOW, &attr);
tcflush(fd, TCIFLUSH);
struct timeval timeout = { 0 };
int result = select(fd+1, &con, 0, 0, &timeout);
Вывод : #stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
eof = ^A; min = 0; time = 1;
-cread
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
То читает исключительно по одному байту, то есть select сигналит на каждый байт приходящий в буфер. Если [VMIN] = 8 , например, то приходит пачкой (что и понятно), но при этом все пакеты меньше 8 естественно накапливаются пока не станет 8 в буфере - так не устраивает.
Отключаю ICANON вообще переставет читать, запись при этом идет отлично. Подскажите кто знает , что можно покрутить в настройках порта.