информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Стало быть 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), биттовое поле ожидания ввода (может оно вам и не нужно), еще какие-то хитрые байтовые элементы структуры.
<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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach