Ошибка при вызове FIONREAD в функции ioctl() в Cygwin

#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