callback-функция для прямого чтения состояния порта в FreeBSD. (serial port example raw select)
Ключевые слова: serial, port, example, raw, select, (найти похожие документы)
Date: Wed, 21 Feb 2001 09:50:04 +0000 (UTC)
From: Oleg RooT <okoreshkov@luxoft.com>
Newsgroups: fido7.ru.unix.bsd
Subject: callback-функция для прямого чтения состояния порта в FreeBSD.
> > 4. Есть ли в эхотаге аналог callback-функций Windows для чтения
> > из порта? Если нет - какая функция позволяет узнать своё состояние
> > при работе с портом (чтение/ожидание данных) и позволяет корректно
> > прервать свою работу по сигналу?
>
> man select
Лучше poll, оно не ограниченно MAX_FD, как select.
а вообще вот кусок, с минимум коментариев:
fsignal() - извращенный обработчик сигналов
do_packet_loop() - основная работа демона (дописать)
say_error() - ну и так ясно...
void do_packet_loop()
{
while(1) ;
// здесь основной код демона...
}
int main(int argc,char** argv)
{
#ifndef DEBUG
openlog("XXXX",LOG_PID, LOG_USER);
#endif
if(setgid(65534))
sayerror("Unable to setgid. You must be "root" to do it");
if(setuid(65534))
sayerror("Unable to setuid. You must be "root" to do it");
if(chdir("/"))
sayerror("Unable to chdir");
switch(sig)
{
case SIGHUP:
syslog(LOG_NOTICE,"got SIGHUP. restarting...");
readconf();
break;
case SIGUSR1:
syslog(LOG_NOTICE,"got SIGUSR1. dumping user database...");
for (int i=0; i < nuser; i++)
syslog(LOG_NOTICE,"uin %d , ip %s",users[i].uin, inet_ntoa(users[i].addr.sin_addr));
syslog(LOG_NOTICE,"done dumping user database");
break;
case SIGTERM:
case SIGINT:
case SIGQUIT:
syslog(LOG_NOTICE,"XXXXX daemon stopped on signal %d",sig);
closelog();
exit(0);
break;
default:
syslog(LOG_NOTICE,"got signal %d. ignore...",sig);
break;
}
}
1165 Прочтений • [callback-функция для прямого чтения состояния порта в FreeBSD. (serial port example raw select)] [08.05.2012] [Комментариев: 0]