Стало быть read 0 у вас возвращает - т.е. данные не...28.07.04 10:57 Число просмотров: 1489 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 28.07.04 10:58 Количество правок: 1
> > case 0: // We have eof > > { > > // we need close port and reopen one? > > printf("eof\n"); > > ReopenSerial(); > > sleep(1); > > break; > > } > > > > case 1: // Reading success > > { > > .... > > кстати полл реально я не использую, я при инициализации > выставляю blockingio, так, что первый кейс я зря включил, > лишняя путаница.
Стало быть read 0 у вас возвращает - т.е. данные не считывает. И это не EOF вовсе. Просто выключено ожидание, было бы что-то - вернуло бы 1 и больше значение. Сейчас под рукой Линукса нет, если не забуду к завтрашнему дню притащу фрагмент. Точно плохо помню, хотя вы и сами сможете хелп по IO_CTL посмотреть. Смысл в том, что есть функция с дыумя аргументами: первый - что делать (получить или установить), второй - ссылка на структуру. В структуре будут интересовать максимум три поля: длина системного буфера (в вашем случае рекомендуется поставить 1), биттовое поле ожидания ввода (может оно вам и не нужно), еще какие-то хитрые байтовые элементы структуры.
только тут больше кода, сначала я открываю ttyS0, инициализирую его, все нормально работает, потом ttyS0 юзается pppd, после чего я снова делаю открытие и инициализацию.......после этого при чтании возникают такие бяки......то, что pppd выставляет unblocking я уже просек, а как избавиться от EOF при чтении еще не вьехал....
readed = read(serial_fd,&buff[pos],1);
switch (readed)
{
case -1: // We have error
{
if (errno == EAGAIN)
{ // Non-blocking I/O has been selected using
// O_NONBLOCK and no data was immediately available for reading
printf("We have error EAGAIN\n");
sleep(1);
goto readagain; // just poll port
}
else
{
printf("Unknown error %d\n", errno);
sleep(1);
}
break;
}
case 0: // We have eof
{
// we need close port and reopen one?
printf("eof\n");
ReopenSerial();
sleep(1);
break;
}
case 1: // Reading success
{
....
кстати полл реально я не использую, я при инициализации...27.07.04 17:59 Автор: sergey Статус: Незарегистрированный пользователь
> только тут больше кода, сначала я открываю ttyS0, > инициализирую его, все нормально работает, потом ttyS0 > юзается pppd, после чего я снова делаю открытие и > инициализацию.......после этого при чтании возникают такие > бяки......то, что pppd выставляет unblocking я уже просек, > а как избавиться от EOF при чтении еще не вьехал.... > > > > readed = read(serial_fd,&buff[pos],1); > > > switch (readed) > { > case -1: // We have error > { > if (errno == EAGAIN) > { // Non-blocking I/O has been selected using > // O_NONBLOCK and no data was immediately > available for reading > printf("We have error EAGAIN\n"); > sleep(1); > goto readagain; // just poll port > } > else > { > printf("Unknown error %d\n", > errno); > sleep(1); > } > break; > } > > case 0: // We have eof > { > // we need close port and reopen one? > printf("eof\n"); > ReopenSerial(); > sleep(1); > break; > } > > case 1: // Reading success > { > ....
кстати полл реально я не использую, я при инициализации выставляю blockingio, так, что первый кейс я зря включил, лишняя путаница.
Стало быть read 0 у вас возвращает - т.е. данные не...28.07.04 10:57 Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 28.07.04 10:58 Количество правок: 1
> > case 0: // We have eof > > { > > // we need close port and reopen one? > > printf("eof\n"); > > ReopenSerial(); > > sleep(1); > > break; > > } > > > > case 1: // Reading success > > { > > .... > > кстати полл реально я не использую, я при инициализации > выставляю blockingio, так, что первый кейс я зря включил, > лишняя путаница.
Стало быть read 0 у вас возвращает - т.е. данные не считывает. И это не EOF вовсе. Просто выключено ожидание, было бы что-то - вернуло бы 1 и больше значение. Сейчас под рукой Линукса нет, если не забуду к завтрашнему дню притащу фрагмент. Точно плохо помню, хотя вы и сами сможете хелп по IO_CTL посмотреть. Смысл в том, что есть функция с дыумя аргументами: первый - что делать (получить или установить), второй - ссылка на структуру. В структуре будут интересовать максимум три поля: длина системного буфера (в вашем случае рекомендуется поставить 1), биттовое поле ожидания ввода (может оно вам и не нужно), еще какие-то хитрые байтовые элементы структуры.
огромное спасибо, я допер, =))28.07.04 11:58 Автор: sergey Статус: Незарегистрированный пользователь