LINUX.ORG.RU

C и time out на чтение из порта??


0

0

Господа!!!

Помогите решить проблемму ...
Есть процедура которая считывает из com порта данные ...

while (true)
{
 res = read(dev_in,ans,1)
 if (ans[1] == 0x02) { break; }
 ...
}

Порт инициализил вот так:
 dev_opt.c_iflag = 0;
 c_cflag != (CLOCAL |CS8)
 c_cflag &= ~CSTOPB;
 c_cflag &= ~PARENB;
 c_oflag = 0;
 c_lflag = 0;

Программа моя работает ... но вот надо сделать timeout на чтение из порта ... а то иначе оно там пожизни будет вертеться ... а ентого не надыть!!!
anonymous

Re: C и time out на чтение из порта??

Можно еще примерно так:

struct sigaction act;
bzero(&act, sizeof(act));
act.sa_handler = sig_alarm;
act.sa_flags = SA_RESETHAND;

if(sigaction(SIGALRM, &act, 0) != 0){
perror("Could not set up timeout");
exit(-1);
}
alarm(opt.timeout);
if ( read(....) < 0) {
if (errno == EINTR) {
printf("Timeout");
.....
}
else {
perror("read");
....
}

}
alarm(0);






Dead ★★★★
()
Ответ на: Re: Re: Re: Re: C и time out на чтение из порта?? от anonymous

Re: Re: Re: Re: Re: C и time out на чтение из порта??

Пример из man 2 select ;-)

#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

int
main(void)
{
fd_set rfds;
struct timeval tv;
int retval;

/* Ждем, пока на стандартном вводе (fd 0) что-нибудь
появится. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Ждем не больше пяти секунд. */
tv.tv_sec = 5;
tv.tv_usec = 0;

retval = select(1, &rfds, NULL, NULL, &tv);
/* Не полагаемся на значение tv! */

if (retval)
printf("Данные доступны.\n");
/* Теперь FD_ISSET(0, &rfds) вернет истинное значение. */
else
printf("Данные не появились в течение пяти секунд.\n");

exit(0);
}

Dead ★★★★
()

Re: C и time out на чтение из порта??

Кстати ещё можешь сделать break по достижении определённого момента времени. Тоесть получаеш время начала чтения порта через gettimeofday() а далее на каждой итерации проверяеш сколько прошло времени на чтение порта и соответственно делаеш break. также учти что gettimeofday возвращает текущее время через 10 мс после вызова.

А также обрати внимание на настройку порта. Там тоже устанавливается время ожидания прихода ответа. Неправильной настройкой порта можешь повесить read до прихода сигнала.

anonymous
()

Re: C и time out на чтение из порта??

Подскажите пожалуйста, где можно почитать
об инициализации порта.
Какие Флаги для чего и как это делается.
По COM-порту и LPT-порту

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