#c #unix #serial-port #cygwin #unistd.h
#c #unix #последовательный порт #cygwin #unistd.h
Вопрос:
Я вызвал метод ioctl
для проверки количества доступных байтов с помощью следующего кода :
::ioctl(serial_port, FIONREAD, amp;available);
Я компилирую это из Cygwin под Windows 10. Но я получаю эту ошибку:
error: ‘FIONREAD’ was not declared in this scope; did you mean ‘FREAD’?
Как я могу это исправить? Я хочу проверить, есть ли байты во входном буфере, поэтому при опросе я не получаю ошибок, когда он пуст. У меня было input/output error with error no.5
.
если невозможно найти константу FIONREAD, есть ли другой способ избежать input/output error
? Я тоже использую режим блокировки VMIN = 0 and VTIME = 1
. Так что он ожидает 100ms
при каждом чтении.
Это мои включаемые файлы :
#include <string.h>
#include<iostream>
#include<stdio.h>
#include <string>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/select.h>
#include <sys/time.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>
Ответ №1:
Вам нужно добавить sys/socket.h
мой prova.c
тестовый код
#include <termios.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
int main()
{
int bytesAv =0 ;
int m_Socket=4 ;
if ( ioctl (m_Socket,FIONREAD,amp;bytesAv) < 0 )
{
// Error
}
}
компилятор не показывает никаких ошибок
$ gcc -c prova.c -Wall