ioctl函数

article/2025/11/8 7:23:26

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

二、 ioctl如何实现
  在驱动程序中实现的ioctl函数体内,实际上是有一个switch{case}结构,每一个case对应一个命令码,做出一些相应的操作。怎么实现这些操作,这是每一个程序员自己的事情。因为设备都是特定的,这里也没法说。

三、ioctl参数
1、用户空间,ioctl的调用具有如下原型:
int ioctl(int fd, unsigned long cmd, …);
其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。
2、驱动空间,ioctl方法的原型如下:
int (*ioctl) (struct inode * node, struct file *filp, unsigned int cmd, unsigned long arg);
1)inode和file:ioctl的操作有可能是要修改文件的属性,或者访问硬件。要修改文件属性的话,就要用到这两个结构体了,所以这里传来了它们的指针。
2)cmd:控制命令。
3)arg:补充参数。
在这里插入图片描述在这里插入图片描述

Struct ifconf{int ifc_len;                 // 缓冲区的大小union{caddr_t ifcu_buf;        // input from user->kernelstruct 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;
};
#include    <stdio.h>
#include    <stdlib.h>
#include    <errno.h>
#include    <sys/ioctl.h>
#include    <sys/socket.h>
#include    <net/if.h>struct ifreq *get_ifreq();int main(int argc, char **argv)
{struct ifreq *ifr, *tobefree;ifr = tobefree = get_ifreq();do {printf("%s\n", ifr->ifr_name);ifr++;} while (ifr->ifr_name[0] != 0);free(tobefree);exit(0);
}struct ifreq *get_ifreq()
{int  sockfd, len, lastlen;char *buf;struct ifconf ifc;sockfd = socket(AF_INET, SOCK_DGRAM, 0);lastlen = 0;len = 40 * sizeof(struct ifreq);        /* initial buffer size guess */for ( ; ; ) {buf = malloc(len);ifc.ifc_len = len;ifc.ifc_buf = buf;if (ioctl(sockfd, SIOCGIFCONF, &ifc) < 0) {if (errno != EINVAL || lastlen != 0) {perror("ioctl");exit(-1);}} else {if (ifc.ifc_len == lastlen) {break;                      /* success, len has not changed */}lastlen = ifc.ifc_len;}len += 10 * sizeof(struct ifreq);   /* increment */free(buf);}return ((struct ifreq *)ifc.ifc_buf);
}

http://chatgpt.dhexx.cn/article/G93UGJuu.shtml

相关文章

linux驱动开发(四):ioctl()函数

前文中我们介绍了应用程序通过使用虚拟文件系统VFS提供的接口&#xff0c;来控制字符驱动程序&#xff0c;完成字符驱动设备的open、close、read、write操作。但是如果我们想进行除此以外的其他操作&#xff0c;拓展一些file_operations给出的接口中没有的自定义功能&#xff0…

linux 内核 - ioctl 函数详解

1. 概念 ioctl 是设备驱动程序中设备控制接口函数&#xff0c;一个字符设备驱动通常会实现设备打开、关闭、读、写等功能&#xff0c;在一些需要细分的情境下&#xff0c;如果需要扩展新的功能&#xff0c;通常以增设 ioctl() 命令的方式实现。 在文件 I/O 中&#xff0c;ioc…

第10章综合案例1广电大数据分析

第10章综合案例1广电大数据分析 实验目的及要求 &#xff08;1&#xff09;现有用户观看历史和用户信息两个广电大数据文件&#xff0c;将对用户数据进行大数据分析。 实验系统环境及版本 Linux Ubuntu 20.04 JDK1.8 Hadoop3.1.0 MySQL8.0.28 Hive3.1.2 实验任务 基本…

图解大数据 | 综合案例-使用Spark分析挖掘零售交易数据

作者&#xff1a;韩信子ShowMeAI 教程地址&#xff1a;http://www.showmeai.tech/tutorials/84 本文地址&#xff1a;http://www.showmeai.tech/article-detail/177 声明&#xff1a;版权所有&#xff0c;转载请联系平台与作者并注明出处 收藏ShowMeAI查看更多精彩内容 引言 …

大数据之实践案例分析

前言 公司由页游转手游&#xff0c;公司的数据分析需要针对手游进行设计&#xff0c;所以原来的那一套针对页游的数据分析框架就显得不是很合适了&#xff0c;一方面在于手游和页游一些业务逻辑上的不同&#xff0c;另外一方面是数据量级上的改变&#xff0c;以及渠道、区服之间…

大数据分析案例-基于朴素贝叶斯算法构建电信客户流失分析预警模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Python+大数据-数据分析与处理(六)-综合案例

Python大数据-数据分析与处理(六)-综合案例 案例一&#xff1a;Appstore数据分析 学习目标 掌握描述性数据分析流程 能够使用pandas、seaborn进行数据分析和可视化 1.案例介绍 案例背景&#xff1a; 对 App 下载和评分数据分析&#xff0c;帮助 App 开发者获取和留存用户…

大数据挖掘分析的经典案例,主要有哪几种?

大数据挖掘分析经典案例有以下几种&#xff1a; 1.预测产品未来一段时间用户是否会流失&#xff0c;流失情况怎么样&#xff1b; 2.公司做了某个促销活动&#xff0c;预估活动效果怎么样&#xff0c;用户接受度如何&#xff1b; 3.评估用户信用度好坏&#xff1b; 4.对现有…

第11章综合案例2影评大数据分析

第11章综合案例2影评大数据分析 实验目的及要求 &#xff08;1&#xff09;现有电影、影评和用户信息3个数据文件&#xff0c;将对其进行大数据分析。 实验系统环境及版本 Linux Ubuntu 20.04 JDK1.8 Hadoop3.1.0 MySQL8.0.28 Hive3.1.2 实验任务 评分次数最多的10部电…

淘宝大数据分析案例

项目介绍 本次结合的是一份淘宝大数据数据&#xff0c;数据集的大小共177MB&#xff0c;数据一共有3182261份&#xff08;三百多万份数据集&#xff09;&#xff0c;一般的软件是无法计算和分析的&#xff0c;比如Excel&#xff0c;MySQL&#xff0c;Python这些都无法较好的完…

数据分析综合案例

数据分析综合案例&#xff1a; 数据分析流程 什么是数据清洗&#xff1f; 简单来说&#xff0c;数据清洗就是把“脏数据”变为“干净的数据”。数据清洗虽然很繁琐&#xff0c;但也很重要。数据清洗流程&#xff1a; 数据的读写、数据的探索与描述、数据简单处理、重复值的处…

磁力搜索网站+下载神器放送2019-03-05

先介绍下背景,因为喜欢看的电影因为版权问题,不能用迅雷及百度云离线下载.今天找了好久,终于发现了一个好用的解决方案. 先介绍常用的磁力搜索网站: 搜索网 https://btsow.pw/tags https://cn.torrentkitty.tv https://www.ciliurl.com/ http://www.zhizhuc.com/ https://www.a…

几款磁力搜索引擎,找资料更方便

Bt177.info 一款强大的磁力搜索引擎网站&#xff0c;这款网站包含有7万多个磁力链接&#xff0c;提供提供网盘形式和磁力形式的储存&#xff0c;有很多你想要的东西。如果是音频和视频的话支持在线观看。 Bt977 磁力搜索引擎&#xff0c;支持网盘播放&#xff0c;磁力下载。 To…

搜索下载神器

前言 新闪存云app是一款功能非常强大的云盘软件&#xff0c;为用户提供了非常给力资源搜索功能&#xff0c;支持多种下载方式&#xff0c;让你在这里体验全网最快速的资源下载&#xff0c;多种格式的文件以及视频也都可以在这里进行下载并进行解析&#xff0c;操作十分的简单&a…

基于python的种子搜索网站,你懂得!

该项目是基于python的web类库django开发的一套web网站&#xff0c;给师弟做的毕业设计。本人的研究方向是一项关于搜索的研究项目。在该项目中&#xff0c;笔者开发了一个简单版的搜索网站&#xff0c;实现了对数据库数据的检索和更新。通过开发该项目&#xff0c;笔者学习和巩…

android下载工具 磁力,【安卓+iOS】磁力搜索+下载工具

【安卓iOS】磁力搜索下载工具 2020-03-29 19:46:20 3点赞 16收藏 2评论 1、比特舟Pro(安卓) 比特舟Pro是一款磁力搜索工具&#xff0c;支持BT和磁力搜索。前身是比特羊&#xff0c;后来改名比特知了&#xff0c;现在又一此改名。名字虽然变了&#xff0c;功能还是一样。 想搜什…

Ubuntu 能直接搜 BT 种子了

Ubuntu的Dash搜索工具允许用户搜索本地和在线资源如亚马逊和维基百科上的内容。现在&#xff0c;一位第三方开发者为Dash搜索工具加入了BT搜索功能&#xff0c;允许用户搜索海盗湾上的torrent文件。这项功能获得了 Canonical 创始人Mark Shuttleworth的支持。 Canonical表示&am…

利用Python爬虫建立自己的磁力搜索引擎

现在磁力站很多,但是搜出来的东西乱七八糟的,广告也多,我看多了觉得挺烦的,正好周末无聊,想着自己做一个,下面附上本次利用Python爬虫磁力站点的教程。 下面是我写爬虫时候主要引用的库 当然,抓取的关键词可以自己从代码里设置,比如title,文件大小之类的。 但我怎么知…

TT盒子种子搜索神器

2、软件名称&#xff1a;tt盒子种子搜索神器 3、软件版本&#xff1a;V1.5 4、软件大小&#xff1a;2.31MB 5、软件作者及网址&#xff1a;TT盒子 网站&#xff1a;www.tthezi.com 6、软件类别&#xff1a;搜索引擎 7、软件语言&#xff1a;简体中文 8、软件授权&#xff1a;免…

想做个磁力链搜索引擎 3

上一篇中&#xff0c;我们已经实现了对tracker的访问&#xff0c;从而获取到了peer对等体的ip地址以及端口号。我们这一篇要实现的是对等体之间的通讯。 在bt种子下载中&#xff0c;对等体就是正在下载你需要文件的另一台主机或提供下载你需要文件的主机。每一个种子一开始都是…