ioctl

ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。

头文件

#include <sys/ioctl.h>

或者

#include < unistd.h >

函数原型

int ioctl( int fd, int request, …/* void *arg */ );

函数说明

request 以及 arg地址的对应关系

  • 套接字
    SIOCATMRK 是否位于带外标记 int
    SIOCSPGRP 设置套接口进程的ID/进程组ID int
    SIOCGPGR 获取套接口进程ID/进程组ID int

  • 文件
    FIONBIO 设置/清除非阻塞I/O标记 int
    FIOASYNC 设置/ 清除信号驱动异步I/O 标志 int
    FIONREAD 获取接收缓存区中的字 节数 int
    FIOSETOWN 设置文件的进程ID 或进程组ID int
    FIOGETOWN 获取文件的进程ID 或进程组ID int

  • 接口
    SIOCGIFCONF 获取所有接口的清单 struct ifconf
    SIOCSIFADDR 设置接口地址 struct ifreq
    SIOCGIFADDR 获取接口地址 struct ifreq
    SIOCSIFFLAGS 设置接口标志 struct ifreq
    SIOCGIFFLAGS 获取接口标志 struct ifreq
    SIOCSIFDSTADDR 设置点到点地址 struct ifreq
    SIOCGIFDSTADDR 获取点到点地址 struct ifreq
    SIOCGIFBRDADDR 获取广播地址 struct ifreq
    SIOCSIFBRDADDR 设置广播地址 struct ifreq
    SIOCGIFNETMASK 获取子网掩码 struct ifreq
    SIOCSIFNETMASK 设置子网掩码 struct ifreq
    SIOCGIFMETRIC 获取接口的测度 struct ifreq
    SIOCSIFMETRIC 设置接口的测度 struct ifreq
    SIOCGIFMTU 获取接口MTU struct ifreq

  • ARP
    SIOCSARP 创建/ 修改ARP 表项 struct arpreq
    SIOCGARP 获取ARP 表项 struct arpreq
    SIOCDARP 删除ARP 表项 struct arpreq

  • 路由流
    SIOCADDRT 增加路径 struct rtentry
    SIOCDELRT 删除路径 struct rtentry

返回值

成功返回0 失败返回-1

文档更新时间: 2021-03-07 21:30   作者:周国强