一、ioctl函数
#include <unistd.h> int ioctl(int fd, int request, ... /* void * arg */); 返回:成功0,出错-1
第三个参数总是一个指针
request:指针类型依赖于request(请求)
我们可以把网络有关的请求分为6类:
- 套接口操作
- 文件操作
- 接口操作
- ARP高速缓存操作
- 路由表操作
- 流系统(第33章)
二、套接口操作
SIOCATMARK如果套接口的读指针当前在带外标志上,则通过第三个参数指向的整数返回一个i额非零值,否则返回零。
SIGCGPRGRP通过第三个参数指向的整数返回来自接收来这个套接口的SIGIO或SIGURG信号而设置的进程ID或进程组ID。
SIGCSPGRP用第三个参数指向的整数设置进程ID或进程组ID以接收
三、文件操作
下面的五中请求都要求ioctl的第三个参数指向一个整数
FIONBIO套接口的非阻塞标志会根据ioctl的第三个参数指向的值是否为零而清除或设置。
这个请求和用fcntl的F_SETFL命令设置和清除O_NONBLOCK文件状态标志效果相同。
FIOASYNC这个标志根据ioctl的第三个参数指向的值是否为零决定清除或接收套接口上的异步I/O信号(SIGIO)。
这个标志用fcntl的F_SETFL命令设置和清除O_AYNC文件状态标志效果相同。
FIONREAD在ioctl的第三个参数指向的整数里返回套接口接收缓冲区中当前的字节数。
这种功能在文件、管道和终端上都能用。
FIOSETOWN在套接口上等价于 SIOCSPGRP
FIOGETOWN在套接口上等价于SIOCGPGRP
四、接口配置