size_t read_tty(uint8_t *buff, size_t length){
ssize_t L = 0;
fd_set rfds;
struct timeval tv;
int retval;
FD_ZERO(&rfds);
FD_SET(comfd, &rfds);
tv.tv_sec = 0; tv.tv_usec = 50000; // wait for 50ms
retval = select(comfd + 1, &rfds, NULL, NULL, &tv);
if (!retval) return 0;
if(FD_ISSET(comfd, &rfds)){
if((L = read(comfd, buff, length)) < 1) return 0;
}
return (size_t)L;
}
Строчка "wait for 50ms". Функция эта выполняется до тех пор, пока полностью нужное количество байт не считается, или не выйдет таймаут. Почему-то на компьютере все нормально работало, а на кубитраке стали "теряться" данные. Пришлось увеличить tv.tv_usec до 500мс.
А еще я намучился с форматом для printf: на компьютере uint64_t выводится как %lu, а кубитрак хочет %llu. Неужто нет нормальных обозначений printf, общих для любых архитектур? Идиотизм какой-то...
Journal information