The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Обработка данных компорта"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Обработка данных компорта"
Сообщение от sashash emailИскать по авторуВ закладки on 27-Ноя-02, 11:58  (MSK)
Как в Unix инициализировать программу обработки поступивших данных
в компорт?  Запустить демон, который будет крутиться и постоянно
опрашивать порт но это занимает ресурсы, или заставить порт генерировать
прерывание при поступлении данных и запускать соответствующий демон?
Но как реализовать второй вариант или где найти доку по этому вопросу?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Обработка данных компорта"
Сообщение от Titov_Alex emailИскать по авторуВ закладки on 29-Ноя-02, 12:22  (MSK)
>Как в Unix инициализировать программу обработки поступивших данных
>в компорт?  Запустить демон, который будет крутиться и постоянно
>опрашивать порт но это занимает ресурсы, или заставить порт генерировать
>прерывание при поступлении данных и запускать соответствующий демон?
>Но как реализовать второй вариант или где найти доку по этому вопросу?
>
посмотри http://linuxland.itam.nsc.ru/misc/other19/index.html

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Обработка данных компорта"
Сообщение от NL Искать по авторуВ закладки on 04-Дек-02, 13:04  (MSK)
я что-то подобное писал для LPT порта, причем писал не с использованием lp драйвера и не через файл устройства и обращался непосредственно к порту. значит чтобы обратится к порту есть такая фишка inb(0xPORT) чтение из порта, outb(data, 0xPORT) запись в порт. чтобы получить доступ к нужным портам есть функция ioperm(), почитай про нее в манах. ну а к каким конкретно портам обращаться читай описание на ком-порт, там же найдешь как выставлять прерывание и как снимать его.
как запестить демон который будет крутиться постоянно:

void *demon(void *arg)
{
......
pthread_exit(NULL);
}

int main()
{
pthread_t tchild;

if ( pthread_create ( &tchild, 0, (void*)demon, 0) != 0)
   perror ("Could not create thread for accept connecton");
else
   pthread_detach(tchild);
return 0;
}
т.е. функция main запускает твой демон и завершается, а демон соответсвенно остается в бэкграунде. вот в кратце описание, но это все писалось под линукс, хотя я думаю под юниксом проблем с этим не будет.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Обработка данных компорта"
Сообщение от NL Искать по авторуВ закладки on 04-Дек-02, 13:13  (MSK)
а да чуть не забыл, когда все будешь компилить, то для gcc нужна опция -O2. и еще, эта прога должна работать от пользователя root т.к. она напрямую работает с портами. если ты хочешь что бы прога вызывалась только когда выставляется прерывание от ком порта (когда пришли данные) то это тебе потребуется писать модуль для ядра а это уже отдельная песня. с одной стороны это сложнее но потом будет гораздо удобнее, можно будет использовать функции ioctl и можно будет работать с файлом устройства.
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру