ioctl参数详解

ioctl()函数详解 阅读详情

本函数影响由fd参数引用的一个打开的文件。

#include<unistd.h>

int ioctl( int fd, int request, ... );

返回0:成功    -1:出错

第三个参数总是一个指针,但指针的类型依赖于request参数。

我们可以把和网络相关的请求划分为6类:

套接口操作  文件操作   接口操作   ARP高速缓存操作    路由表操作    流系统

下表列出了网络相关ioctl请求的request参数以及arg地址必须指向的数据类型:

类别
 Request
 说明
 数据类型
 
套

接

口
 SIOCATMARK

SIOCSPGRP

SIOCGPGRP
 是否位于带外标记

设置套接口的进程ID或进程组ID

获取套接口的进程ID或进程组ID
 int

int

int
 
 

文

 

件
 FIONBIN

FIOASYNC

FIONREAD

FIOSETOWN

FIOGETOWN
 设置/清除非阻塞I/O标志

设置/清除信号驱动异步I/O标志

获取接收缓存区中的字节数

设置文件的进程ID或进程组ID

获取文件的进程ID或进程组ID
 int

int

int

int

int
 
 

 

 

 

 

 

接

 

 

口
 SIOCGIFCONF

SIOCSIFADDR

SIOCGIFADDR

SIOCSIFFLAGS

SIOCGIFFLAGS

SIOCSIFDSTADDR

SIOCGIFDSTADDR

SIOCGIFBRDADDR

SIOCSIFBRDADDR

SIOCGIFNETMASK

SIOCSIFNETMASK

SIOCGIFMETRIC

SIOCSIFMETRIC

SIOCGIFMTU

SIOCxxx
 获取所有接口的清单

设置接口地址

获取接口地址

设置接口标志

获取接口标志

设置点到点地址

获取点到点地址

获取广播地址

设置广播地址

获取子网掩码

设置子网掩码

获取接口的测度

设置接口的测度

获取接口MTU

(还有很多取决于系统的实现)
 struct ifconf

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq

struct ifreq
 
 

ARP
 SIOCSARP

SIOCGARP

SIOCDARP
 创建/修改ARP表项

获取ARP表项

删除ARP表项
 struct arpreq

struct arpreq

struct arpreq
 
路

由
 SIOCADDRT

SIOCDELRT
 增加路径

删除路径
 struct rtentry

struct rtentry
 
流
 I_xxx

 
 
 
 

 

套接口操作:

明确用于套接口操作的ioctl请求有三个,它们都要求ioctl的第三个参数是指向某个整数的一个指针。

 

SIOCATMARK:    如果本套接口的的度指针当前位于带外标记,那就通过由第三个参数指向的整数返回一个非0值;否则返回一个0值。POSIX以函数sockatmark替换本请求。

SIOCGPGRP:       通过第三个参数指向的整数返回本套接口的进程ID或进程组ID,该ID指定针对本套接口的SIGIO或SIGURG信号的接收进程。本请求和fcntl的F_GETOWN命令等效,POSIX标准化的是fcntl函数。

SIOCSPGRP:     把本套接口的进程ID或者进程组ID设置成第三个参数指向的整数,该ID指定针对本套接口的SIGIO或SIGURG信号的接收进程,本请求和fcntl的F_SETOWN命令等效,POSIX标准化的是fcntl操作。

文件操作:

以下5个请求都要求ioctl的第三个参数指向一个整数。

FIONBIO:        根据ioctl的第三个参数指向一个0或非0值分别清除或设置本套接口的非阻塞标志。本请求和O_NONBLOCK文件状态标志等效,而该标志通过fcntl的F_SETFL命令清除或设置。

FIOASYNC:      根据iocl的第三个参数指向一个0值或非0值分别清除或设置针对本套接口的信号驱动异步I/O标志,它决定是否收取针对本套接口的异步I/O信号(SIGIO)。本请求和O_ASYNC文件状态标志等效,而该标志可以通过fcntl的F_SETFL命令清除或设置。

FIONREAD:     通过由ioctl的第三个参数指向的整数返回当前在本套接口接收缓冲区中的字节数。本特性同样适用于文件,管道和终端。

FIOSETOWN:    对于套接口和SIOCSPGRP等效。

FIOGETOWN:    对于套接口和SIOCGPGRP等效。

接口配置:

得到系统中所有接口由SIOCGIFCONF请求完成,该请求使用ifconf结构,ifconf又使用ifreq

结构,如下所示:

Struct ifconf

{

    int ifc_len;                 // 缓冲区的大小

union

{

        caddr_t ifcu_buf;        // input from user->kernel

        struct ifreq *ifcu_req;    // return of structures returned

    }ifc_ifcu;

};

#define  ifc_buf  ifc_ifcu.ifcu_buf    //buffer address

#define  ifc_req  ifc_ifcu.ifcu_req    //array of structures returned

 

#define  IFNAMSIZ  16

 

struct ifreq

{

    char ifr_name[IFNAMSIZ];           // interface name, e.g., “le0”

union

{

        struct sockaddr ifru_addr;

        struct sockaddr ifru_dstaddr;

        struct sockaddr ifru_broadaddr;

        short ifru_flags;

        int ifru_metric;

        caddr_t ifru_data;

    }ifr_ifru;

};

 

#define ifr_addr     ifr_ifru.ifru_addr            // address

#define ifr_dstaddr   ifr_ifru.ifru_dstaddr         // otner end of p-to-p link

#define ifr_broadaddr ifr_ifru.ifru_broadaddr    // broadcast address

#define ifr_flags     ifr_ifru.ifru_flags        // flags

#define ifr_metric    ifr_ifru.ifru_metric      // metric

#define ifr_data      ifr_ifru.ifru_data        // for use by interface

 

再调用ioctl前我们必须先分撇一个缓冲区和一个ifconf结构,然后才初始化后者。如下图

展示了一个ifconf结构的初始化结构,其中缓冲区的大小为1024,ioctl的第三个参数指向

这样一个ifconf结构。

 

假设内核返回2个ifreq结构,ioctl返回时通过同一个ifconf结构缓冲区填入了那2个ifreq结构,ifconf结构的ifc_len成员也被更新,以反映存放在缓冲区中的信息量。

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/6_system/linux/Linuxjs/20090822/169862.html

Linux驱动之ioctl接口在设备参数设置的应用实践 通过ioctl接口,用户可以向设备驱动发送特定的命令,并传递相应的参数。在ioctl函数中,首先根据命令码进行判断,然后通过copy_from_user函数将用户空间传递的参数复制到内核空间,并进行相应的配置或控制操作。在实际应用中,根据需求可以添加更多的命令码和操作。该命令码表示一个可写类型的ioctl命令,'C’是一个命令码占位符,1是具体的命令码值,int表示传递给驱动的参数类型。下面给出一个简单的应用实践示例,假设我们需要通过ioctl接口设置虚拟字符设备的参数,比如设置设备打开/关闭状态。 阅读详情

相关推荐

VCSA的vmware-updatemgr服务无法启动和vSAN界面报“certificate chain is not trusted and thumbprint doesn‘t match”处理

"Unable to update CM service info"和"Server certificate chain is not trusted and thumbprint doesn't match"问题处理

jetliu05的博客 1883

linux 内核 - ioctl 函数详解

linux 内核 - ioctl 函数详解 1. 概念 ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。 在文件 I/O 中,ioctl 扮演着重要角色,本文将以驱动开发为侧重点,从用户空间到内核空间纵向分析 ioctl 函数。 2. 用户空间 ioctl #include <sys/ioctl.h> int ioctl(int fd, int cm

JCfyw的博客 5181

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 507

linux 驱动——高级字符驱动程序操作

内容ioctl 的 ioctl 的系统概念 与用户空间同步的方法 进程休眠 非阻塞IO及与用户间的通信 原型函数int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);一、ioctl 命令ioctl 的命令由四部分组成通过ioctl()函数的cmd,下发需要底层响应的命令。c

qq_22340085的博客 989

成本150元的高性能RDP协议瘦客户机

云终端市场是一个跨度很大的市场。既有数千元的品牌的瘦客户机,也有几百元的瘦客户机,还有200-300元的支持RDP协议的多用户云终端。但是200-300元的多用户终端,在显示性能上不尽人意,一般用于地产中介门店,工厂产线的电子看板等场合。有没有性能更好,价格更低的方案呢? 答案是有。 这个方案就是 二手的x86 瘦客户机 + DoraOS瘦客户机系统免费版(仅支持RDP)。 首先我们看硬件,在某宝搜索 升腾C92 ,找到最低配置的( CPU:J1800,内存:2G,硬盘:8G)。价格都在150以内。

云飞扬的桌面云 7412

CMake是什么?为什么学习CMake

CMake的主要作用和重要性,包括其在跨平台构建中的应用、如何支持多种编译器及操作系统,以及它在管理大型和复杂项目中的优势。

小鱼酱的博客 3872

Linux下的ioctl()函数

Linux下的ioctl()函数 一、什么是ioctl   ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。   ioctl函数是文件结构中的一个属性分量,就是说如果你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数来控制设备的I/O通道。   用户程序所作的只是通过命令码(cmd)告诉驱动程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做的事情.

5G砖家的博客 1340

大模型量化方法总结

本文主要对大模型量化方法进行了总结,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 模型精度 3. 量化方法 3.1 方法一 3.2 方法二 3.3 方法三

herosunly的博客 1万+

关于网络接口的ioctl使用

本文转自:http://hi.baidu.com/kevert/blog/item/4c95b052b86bb10e0cf3e3c8.html ioctl函数(1) 2007-02-09 16:45 ioctl函数   本函数影响由fd参数引用的一个打开的文件。   #include int ioctl( int fd, int request, .../*

Newborn baby 796

H3C BGP联盟实验

bgp,bgp联盟,bgp公认团体属性,

一只懒羊羊 970

Python趣学篇:用Pygame打造绚烂流星雨动画

这是一个基于Pygame开发的流星雨动画项目,具有以下特效:🌠多彩流星:8种不同颜色的流星随机生成,每颗都有独特的轨迹✨粒子尾迹:每个流星都带有动态的粒子拖尾效果,增强视觉冲击力🌟闪烁星空:150颗背景星星营造真实的夜空氛围🌌渐变背景:深蓝到黑色的自然渐变,模拟夜空色彩💫斜向轨迹:所有流星都以30-60度角自然斜向下运动🎨中文显示:完美支持中文字体,显示"斜向流星雨来啦!"等文字整个程序运行流畅,达到60FPS的丝滑体验,让你仿佛置身于真实的流星雨之中!

Code_流苏:在代码中寻诗意,在实践中觅真知 6060

c语言 ioctl,ioctl参数详解

本函数影响由fd参数引用的一个打开的文件。#includeint ioctl( int fd, int request, .../* void *arg */ );返回0:成功-1:出错第三个参数总是一个指针,但指针的类型依赖于request参数。我们可以把和网络相关的请求划分为6类:套接口操作文件操作接口操作ARP高速缓存操作路由表操作流系统下表列出了网络相关ioctl请求的request参数以...

weixin_36212334的博客 2822

34、Text2KGBench与GeoQuestions1089:知识图谱生成与地理空间问答的新进展

本文介绍了Text2KGBench和GeoQuestions1089在知识图谱生成与地理空间问答领域的最新进展。Text2KGBench提供了一个开放且可复现的基准,用于从文本生成知识图谱,并结合多个LLM模型和评估工具推动研究。GeoQuestions1089是目前最大的地理空间问答数据集,与GeoQA2系统结合,推动了地理空间问答系统的发展。文章还探讨了技术挑战和未来研究方向,包括多模态知识图谱生成和深度学习优化的地理空间问答系统。

css33的专栏 114

ioctl函数详解(参数详解,驱动unlocked_ioctl使用、命令码如何封装)

@ioctl函数详解 一、ioctl函数的原型 在用户空间的函数原型 #include <sys/ioctl.h> int ioctl(int d, int request, ...); //io的控制,设备的控制 /***第一个参数d是打开的文件描述符***/ /***The second argument is a device-dependent request code,An ioctl() request has encoded in it whether t

weixin_39035140的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ioctl函数的inode参数

转载至:https://blog.youkuaiyun.com/woxiangzi/article/details/48491745 一、ioctl的简介: 虽然在文件操作结构体"structfile_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是所有的字符设备都需要的,所以文件操作结构体也不会有对应的...

linxi8693的博客 542

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python 中 fcntl, ioctl 值结果参数

python 标准库中包含一些 Linux 系列的专有服务 模块,fcntl 就是其中一个。本文讨论的 fcntl 和 ioctl 的 python 包装函数都包含在这个模块当中。 fcntl 获取操作 fcntl 的函数 C 原型如下,《Linux/Unix系统编程手册》5.2 节有介绍。fcntl 对于大多数操作来说,从返回值中就能获取结果;只有少部分需要值结果参数来完成功能。 int fcntl(int fd, int cmd, ... /* arg */ ); python 原型如下 fcntl

zhouguoqionghai的博客 2343

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ioctl函数参数

ioctl函数参数   2009-11-26 10:44:51|  分类: 工作|举报|字号 订阅        网络程序(一般是服务器程序)中ioctl常用于在程序启动时获得主机上所有接口的信息:接口的地址、接口是否支持广播、是否支持多播等等。 #include    or #include int ioctl(int fd,

lin364812726的专栏 2405

ioctl命令及参数传递

一、ioctl的简介: 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是所有的字符设备都需要的,所以文件操作结构体也不会有对应的函数操作。 出于这样的原因,ioctl就有它的用处了————一些没办法归类的函数就统一放在ioctl这个函数操作

程序猿成长之路 1万+

ioctl参数cmd=2错误

在写内核驱动的时候,用到了ioctl。自己定义cmd作为ioctl的参数。如下: enum CMD { LEVEL_DOWN, LEVEL_UP, GPIO_INPUT, GPIO_OUTPUT, GPIO_GET, }; ioctl底层调用代码: static long led_ioctl(struct file *file,...

weixin_33805743的博客 1405

linux ioctl网络参数设置,请问上linux上网络设置ioctl函数参数的有关问题。

请教下linux下网络设置ioctl函数参数的问题。。。本帖最后由 dklovemyself 于 2013-01-28 12:40:01 编辑HI想请教大家ioctl设置/获取网络参数问题现在拿个设置子网掩码当例子structsockaddr_innetmask_addr;bzero(&netmask_addr,sizeof(structsockaddr_in));netmas...

weixin_39702639的博客 166

通过ioctl实现多参数传递的实战示例

深入讲解如何利用ioctl实现高效的多参数传递,结合实际场景剖析关键实现细节,帮助开发者更好地掌握ioctl在驱动开发中的灵活应用。

weixin_29496633的博客 171

spi ioctl无效参数解决

方法一: struct spi_ioc_transfer tr; /* 这种写法一定要赋初值 */ memset(&tr,0,sizeof(struct spi_ioc_transfer)); tr.tx_buf = (unsigned long)tx; tr.rx_buf = (unsigned long)rx; tr.len = sizeo...

Herok 6988

驱动中ioctl参数分析

一、ioctl的简介: 虽然在文件操作结构体"structfile_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是所有的字符设备都需要的,所以文件操作结构体也不会有对应的函数操作。 出于这样的原因,ioctl就有它的用处了————一些没办法归类的函数就统一放在ioctl这个函数操作中

woxiangzi的博客 2971

ioctl()函数的cmd参数是怎样得出的?

ioctl()函数的cmd参数是怎样得出的? ① Linux对ioctl()函数的cmd参数有特殊的定义   ② 我们来以_IOW为例,看看Linux系统是如何定义_IOW宏的 #define _IOW(type,nr,size)  _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) #define _IOC(dir,type,nr,s

maturelw的专栏 2677

ioctl() 参数

在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:      bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。      bit29~bit15 14位为 "数据大小" 区,表示 ioctl() 中的 ar

zhiweiyouzhishenghuo的专栏 1567
上一篇: pthread线程库静态编译头文件&nbsp;..另…
下一篇: 多线程服务器的常用编程模型
龍城狂霸拽爺
博客等级 码龄16年 10粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值