В частности, я не уверен, что третий параметр в функции 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 () .
Здесь есть больше информации , чтобы помочь в создании алгоритмов для чтения из порта.