информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяГде водятся OGRыСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Китайский прорыв из ESXi 
 С наступающим 
 libmdbx => MithrilDB 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Стало быть read 0 у вас возвращает - т.е. данные не... 28.07.04 10:57  Число просмотров: 1556
Автор: 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), биттовое поле ожидания ввода (может оно вам и не нужно), еще какие-то хитрые байтовые элементы структуры.
<programming>
[Unix] чтение (read) из компорта (ttyS0) возвращает НОЛЬ! Что делать? 27.07.04 17:12  
Автор: sergey Статус: Незарегистрированный пользователь
<"чистая" ссылка>
как то странно все это.
Фрагмент кода, включая IO_CTL где? 27.07.04 17:26  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
<"чистая" ссылка>
[Unix] Здесь 27.07.04 17:56  
Автор: 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
{
....
кстати полл реально я не использую, я при инициализации... 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 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
огромное спасибо, я допер, =))

еще и с_сс[V_MIN] (minimum number of characters to read) гребаный pppd выставляет ноль!
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach