Здравствуйте!
Работаю с внешним устройтвом com-port, через USB.
Не могу добиться возврата из фунции чтения в блокиружщем режиме, при отсутсвии сигнала.
Инициализация порта:
int fd = open(«/dev/ttyUSB0», O_RDWR | O_NOCTTY );
if (fd <= 0) {
cout << "port open error ";
fd = 0;
return 1;
}
tcgetattr(fd,&oldtio); // save current port settings
tcgetattr(fd,&newtio); // save current port settings
newtio.c_lflag &= ~(ICANON|ECHO|ISIG);
newtio.c_cflag |= B115200 | CS8 | CLOCAL | CREAD;
newtio.c_cflag &= ~(CRTSCTS | PARENB | CSTOPB | CSIZE);
newtio.c_oflag &= ~OPOST;
newtio.c_cc[VTIME] = 1;
newtio.c_cc[VMIN] = 1;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
cout<<"open port ";
return 0;
// Чтение
ssize_t ret = read(fd, readbuf, num);
if (ret==-1){
cout<<«Error tty»;
return 1;
}
if (ret!=num){
cout<< «Error read» + to_string(ret);
return 2;
}
return 0;
Если от внешнего устройства нет данных (при разрыве и т.п.)
функции read блокирует поток.
По описанию если флаг newtio.c_cc[VTIME] = 1; фунция должна через 0,1 секунду вернуть значение 0 (данных нет)
tty, ttyusb