Как установить прерывание с последовательным на Linux? - PullRequest
0 голосов
/ 28 января 2019

Я хочу установить прерывание для последовательного порта в Linux, поэтому я делаю это по сигналу. И обработчик сигнала хава сформулировал, но я не знаю, как получить число символов. В частности, я не уверен, что третийпараметр в функции read (), когда обработчик вызывается системой. Итак, мне нужно решение, которое знает количество последовательных данных.

Спасибо вам всем.

PS : Мой английский нехорошо, поэтому вышесказанное не может быть четко выражено

void serialHandler(int sig)
{
    read(fd,buffer,I don't know);
}

1 Ответ

0 голосов
/ 28 января 2019

В частности, я не уверен, что третий параметр в функции read (), когда обработчик вызывается системой

read () полностью описан здесь и включает в себя следующий пример:

#include <sys/types.h>
#include <unistd.h>
...
char buf[20];
size_t nbytes;
ssize_t bytes_read;
int fd;
...
nbytes = sizeof(buf);
bytes_read = read(fd, buf, nbytes);

Обычно используется конструкция цикла (например, вокруг кода, аналогичного показанному выше) при тестировании вывода read для критериев выхода.В приведенной выше реализации (без зацикливания) bytes_read содержит количество успешно прочитанных байтов, исключая все удаленные символы возврата каретки.Если обнаружена ошибка чтения или конец файла (EOF), возвращаемое значение может быть меньше значения, указанного в параметре number_ofBytes.Если возникает ошибка, read возвращает 0 и устанавливает errno в ненулевое значение.

Примечание. Как уже упоминалось в комментариях, использование read() в сочетании с последовательным портом, скорее всего, исключает возможность возникновения условия EOF.

Также, чтобы изложить комментарий о с использованием таймаутов с read () , и как реализовать тайм-аут для самой функции чтения, используяФункция select () .

Здесь есть больше информации , чтобы помочь в создании алгоритмов для чтения из порта.

...