LINUX.ORG.RU

считывание данных их последовательного устройства


0

0

Можно ли организовать считывание данных из последовательного устройства (например com-порта), чтобы при этом считанные байты не удалялись из файла устройства.

Насколько я понимаю системный вызов read для последовательного устройства считывает нужное кол-во байт, а при следующем вызове считанные данные в файле устройства уже не видны. Наверно должен быть режим считывания в котором данные не удаляются и доступны для следующих вызовов read.

Подскажите, пожалуйста, куда копать.

anonymous
Ответ на: комментарий от asgard

я бы всё же хотел найти решение на уровне системных вызовов неужели такой режим работы последовательных устройств отсутствует?

anonymous
()

Это ещё зачем?

anonymous
()
Ответ на: комментарий от anonymous

> я бы всё же хотел найти решение на уровне системных вызовов неужели такой режим работы последовательных устройств отсутствует?

вот и посмотрите исходники. там вы, как минимум, увидите какие системные операции применимы для данного драйвера и *как именно* они реализованы. скорее всего, это наиболее оптимальный путь получения ответа на ваш вопрос.

asgard
()
Ответ на: комментарий от asgard

Нет никакого "данного драйвера". Вопрос о работе с абстрактным последовательным устройством. Есть ли стандартные системные вызовы для этого?

anonymous
()
Ответ на: комментарий от anonymous

> Нет никакого "данного драйвера". Вопрос о работе с абстрактным последовательным устройством. Есть ли стандартные системные вызовы для этого?

Драйвер COM-порта есть, а вот специальных системных вызовов для работы с COM-портом нет, это противоречило бы одной из идей ядра Linux.

Agent666
()
Ответ на: комментарий от anonymous

> Есть ли стандартные системные вызовы для этого?

ещё раз говорю, посмотрите, как в ядре обрабатываются стандартные операции read/write/etc для com порта.

asgard
()
Ответ на: комментарий от asgard

Надо курить termios и ioctls Узнать число принятых и ожидающих чтения байт в порту можно через ioctl( fd, FIONREAD, &nbytes). Посмотри - может быть и есть ioctl() - возвращающий байт из очереди. Если же нет такого - то довольно легко завести свой собственный буффер приема и написать к нему функцию неразрушающего чтения

anonymous
()
Ответ на: комментарий от Agent666

Управление модемными ногами происходит с помощью системного вызова ioctl()

Чтение без удаления данных врят ли имеет место быть, по крайней мере в raw mode

anonymous
()
Ответ на: комментарий от anonymous

Разработчики ядра любят добавлять флаги в драйвер СОМ порта. Аффтор топика тоже мог бы внести свою лепту.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.