移植从Unix到linux的ioctl()调用,错误与FIONBIO

我想使用ioctl()来获取准备读取的字节数

我做的方式是:

mysocket=socket(....); ioctl(mysocket, FIONBIO, &zero); connect(.....); ioctl( mysocket, FIONREAD, &numBytes ); read(mysocket, buffer, numBytes); 

这是在Unix工作正常,现在我必须将其移植到Linux我不断收到错误

错误:“FIONBIO”未在此范围内声明

有一些特定于Linux的头文件? 或者'FIOBIO'在linux中完全不起作用?

我有以下头文件:

 #include <cstring> #include <sys/socket.h> #include <stropts.h> #include <fcntl.h> #include <stddef.h> #include <sys/un.h> #include <sys/types.h> #include <stdlib.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <sys/select.h> #include <fstream> 

我删除了

 #include <sys/filio.h> 

因为它是抛出错误说sys / filio.h没有find

你有没有试过包括sys / ioctl.h

这段代码适用于我:

 #include <sys/ioctl.h> #include <stdio.h> int main() { printf("FIONBIO value %d\n", FIONBIO); } 

当我执行grep -R FIONBIO /usr/include ,发现在这里:

 /usr/include/asm-generic/ioctls.h:#define FIONBIO 0x5421