【Linux应用编程基础】ioctl函数

2023-05-16

一、为什么需要ioctl函数

在裸机开发中,应用程序直接作用于寄存器。而在Linux开发中Linux驱动与Linux应用在代码层级上是分开的,在实际开发过程中也是分两拨人开发的,Linux驱动服务于应用,Linux应用又作用于驱动。

此时,Linux应用与驱动间就需要一个桥梁,ioctl很好地肩负了这个功能。

二、什么是ioctl函数

在Linux字符设备传输中,需要使用ioctl函数来完成基础的读写以及特殊场景的控制

ioctl是一个属性分量,应用开发人员可以在应用层通过ioctl函数控制设备的IO通道。例如我需要控制电机正向旋转,在裸机开发中我可以直接控制GPIO口,但在Linux中需要驱动层给我封装一层MOTO_CTL_FORWARD的属性,并存储设备节点于/dev/moto1路径下,我open对应路径的节点后,直接通过ioctl函数调用其属性,就可以实现电机的正向旋转。

#include <sys/ioctl.h>
int ioctl(int fd, unsigned long request, ...);


fd: 文件描述符。
request: 此参数与具体要操作的对象有关,没有统一值, 表示向文件描述符请求相应的操作。
...: 此函数是一个可变参函数, 第三个参数需要根据 request 参数来决定,配合 request 来使用。
返回值: 成功返回 0,失败返回-1。

三、IO含义亦有不同

裸机中的IO一般为GPIO的缩写,全程为General-purpose input/output,我们直接操作于对应的物理IO口,以实现基础的上下拉电平操作或者IIC等时序控制。而在Linux中一切皆文件,IO表示file input/output,即对文件的读写操作。

四、ioctl与write/read、open与fopen的区别

以下代码简单描述区别(引自正点原子):

write/read与ioctl并不冲突,互为补充,以下为ioctl相关示例。

open是Linux提供的底层调用,fopen是C语言的标准库函数,Linux中fopen底层调用也是open,对于底层某文件的明确调用,建议使用open。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux应用编程基础】ioctl函数 的相关文章

  • YOLO3D 基于图像的3D目标检测算法

    参考文档 xff1a https ruhyadi github io project computer vision yolo3d 代码 xff1a https github com ruhyadi yolo3d lightning 本次分
  • nuscenes激光雷达数据抽稀

    nuScenes文件说明 Mini nuScenes下载后得到名称为 v1 0 mini tgz 的压缩包 xff0c 主要包含maps samples sweeps和v1 0 mini等4个文件夹 下面分别进行简要介绍 maps xff1
  • Ubuntu执行定时命令的方法

    简单使用如下 输入下面的命令安装at xff1a sudo apt span class token operator span get install at 输入下面的命令 xff1a span class token comment e
  • Window10_WSL2 初体验 [win下linux子系统]

    文章目录 参考与前言安装WSL切换wsl2以使用GPU资源启动时进入固定文件夹使用进程使用GPUROS gazebo 仿真待更新 参考与前言 Install WSL 此文主要是写一下windows下怎样快乐使用ubuntu 毫无障碍 xff
  • Linux环境下——C语言聊天室项目界面展示

    运行环境ubuntu12 04 服务器启动 xff1a 用户注册 xff1a 用户登录 xff1a 私聊功能 Id 61 32用户给id 61 33用户发送hello xff1b 群聊功能 xff1a Id 61 33用户向所有人发送hel
  • 算法---短除法求最大公约数

    短除法 短除符号就是除号倒过来 短除就是在除法中写除数的地方写两个数共有的质因数 xff0c 然后落下两个数被公有质因数整除的商 xff0c 之后再除 xff0c 以此类推 xff0c 直到结果互质为止 xff08 两个数互质 xff09
  • Kubernetes(K8S)集群部署搭建图文教程(最全)

    Kubernetes 集群安装 前期准备集群安装系统初始化Harbor采取私有的仓库去镜像使用集群检测集群功能演示 前期准备 第一步 xff1a Router软路由构建 第二步 xff1a centos7安装 5台 xff08 自行安装 x
  • Nginx反向代理部署在K8s上的seafile服务,上传文件缓慢的解决方案

    前言 在k8s上搭建好seafile云文档服务后 xff0c 在拥有公网IP的反向代理服务器上采用Nginx进行反向代理 问题描述 seafile网页上传文件时发现 xff1a 上传几kB的小文件正常 xff0c 上传1MB以上大小的文件卡
  • FreeBSD13简单命令安装KDE5

    span class token comment 经过个人多次测试 xff0c 注释部分是个的经验 xff0c 试过10多次KDE安装总结 xff0c 希望对大家有用 xff0c 谢谢点赞 span span class token fun
  • kali对未知web server透测试1

    靶机渗透 主机IPkali192 168 101 62靶机未知 靶机探测 靶机下载 xff1a https pan baidu com s 1P8s ntf05dRSWOg LrxD Q 提取码 xff1a 1234 1 打开靶机 选择我已
  • kali对未知web server透测试2

    环境介绍 主机IP xff08 NAT xff09 kali192 168 252 128靶机2未知 靶机下载 xff1a https pan baidu com s 1u5xbmU13wheXE4 M508qFw 提取码 xff1a 12
  • MS08_067复现+远程控制

    环境 主机ipkali Linux192 168 252 128Windows xp192 168 252 148 漏洞介绍 https docs microsoft com zh cn security updates Securityb
  • CVE-2020-0796(永恒之黑)复现,影响版本windws10,windos server2016

    漏洞介绍 https nvd nist gov vuln detail CVE 2020 0796 漏洞影响版本 Windows 10 Version 1903 for 32 bit Systems Windows 10 Version 1
  • hackbar工具安装使用教程

    HackBar工具介绍 HackBar 是一个浏览器上的一个插件 xff0c 包含一些黑客常用的工具 xff0c 比如SQL injection XSS 加密等 免费版下载 百度网盘 xff1a https pan baidu com s
  • python 百度aip实现文字识别

    介绍 百度aip模块是用于实现百度云与用户接口 xff0c 简单来说就是使用百度云所拥有的人工智能模块 模块使用 pip install baidu aip 下载百度云模块 登录百度云账号 填写信息 使用官方的文档 https cloud
  • python3 实现股票监控

    实现功能 1 设置股票的卖出个买入的价格 2 程序对价格进行监控 3 当价格达到预定值时发送邮件提醒 模块安装 pip install tushare pip install pandas 如果非常慢 xff1a https blog cs
  • 【网络安全CTF】BUUCTF(Basic篇)

    Linux Labs 解题思路 xff1a 已给用户名密码 xff0c 直接用ssh工具连接即可获取flag 查找flag在跟下 提交完成 BUU LFI COURSE 1 访问链接 xff1a 为php代码审计题 xff0c 看题目要求构
  • 密码学基本概念

    密码学简介 密码是经过加密过后的口令 xff0c 是指用特定的变换对数据信息进行加密保护或者安全身份认证的物质和技术 xff0c 密码学是对安全通信技术的研究 xff0c 要能够有效的防范潜在攻击 xff0c 也就是对信息加密解密的过程 密
  • 部署在k8s上的jenkins代理端口对外开放解决方案

    前言 Jenkins服务部署在k8s集群上 xff0c 之前的项目涉及的代理节点和集群在同一个内网网段 环境 Jenkins 对应jdk版本为openjdk version 34 11 0 18 34 问题描述 Jenkins要添加外部网络
  • Qt 利用stylesheet 设置按钮五态图标

    用过Qt的相信大家都对QPushButton这个类十分熟悉 xff0c 下面将介绍一种利用setstylesheet的方式 xff0c 设置按钮的五种状态 在Qt中QPushButton在视觉上给我们有以下五种状态 xff0c 分别是nor

随机推荐

  • 【Go语言学习】安装与配置

    文章目录 前言一 Go语言学习站二 安装与配置1 安装2 环境变量配置3 Gland编辑器安装与配置Hello World 总结 前言 Go语言特性 Go xff0c 又称为 Golang xff0c 是一门开源的编程语言 xff0c 由
  • 【安全工具】Httpx信息收集

    文章目录 前言一 下载二 使用步骤1 帮助文档2 常用命令常用组合命令 xff1a 总结 前言 HTTPX 是一个功能强大的 HTTP 客户端工具 xff0c 用于执行各种网络任务 xff0c 例如发现 Web 应用程序漏洞 探测域名和端口
  • 【云计算】Hadoop集群安装

    文章目录 前言一 环境二 安装虚拟机及配置配置网络 三 安装Ubuntu及配置下载ISO镜像VMware安装UbuntuUbuntu配置 xff1a 配置结果IP免密登录 JAVA安装hadoop安装 xff1a 文件的作用core sit
  • 图像处理-区域标记

    图像处理 区域标记 Matlab code clc span class token punctuation span close all span class token punctuation span span class token
  • 采用傅里叶变换进行平滑操作

    采用傅里叶变换进行平滑操作 clc close all span class token punctuation span span class token function clear span all span class token
  • 变分推理-ELBO

    变分推理 ELBO 变分推理ELBO 变分推理 变分推理的原理等价于最小化KL散度 xff1a K L q
  • Bayesian Neural Network Recent Papers-贝叶斯神经网络相关研究文章

    Bayesian Neural Network Recent Papers 贝叶斯神经网络相关研究文章 MethodsVariational Inference VI Markov Chain Monte CarloMCMC 43 VIEn
  • Bayes基本概念

    Bayes基本概念 Prior 先验 xff1a p z p z p z 看到数据前的猜测 xff1b Posterior 后验 xff1a
  • vm Debian 9 做服务器

    虚拟机 xff08 vm xff09 Debian 9 做服务器 参考虚拟机Centos做服务器 参考设置静态ip和dns 安装vm 43 debian9 不多说设置中文字符 43 locale安装net tools apt get ins
  • ProXmox VE创建虚拟机

    Proxmox VE Proxmox VirtualEnvironment 是一个非常棒的集成OPENVZ支持KVM应用的环境 有方面易用的WEB界面 xff0c 基于JAVA的UI和内核接口 xff0c 可以登录到VM客户方便的操作 xf
  • 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%

    背景 启动是App给用户的第一印象 xff0c 对用户体验至关重要 抖音的业务迭代迅速 xff0c 如果放任不管 xff0c 启动速度会一点点劣化 为此抖音iOS客户端团队做了大量优化工作 xff0c 除了传统的修改业务代码方式 xff0c
  • supervisor安装使用

    supervisord服务进程管理器 一 安装 yum span class token function install span supervisor 二 目录及使用 安装后 1 生成 etc supervisord conf 配置文件
  • laravel引入第三方云平台及使用方法

    一 引入第三方类 1 阿里oss span class token function composer span require jacobcyl ali oss storage 2 1 2 腾讯cos span class token f
  • 在ubuntu上安装多个版本的CUDA,并且可以随时切换

    前言 实验室工作站被多人使用导致需求不同的cuda版本 xff0c 一直没找到一个完全完整靠谱的教程 xff0c 这是我参考几个博客完成测试的全过程记录 xff0c 方便以后操作 xff0c 无任何商业用途 xff0c 如有侵权 xff0c
  • 在CentOS运行APPIMAGE文件时提示AppImages require FUSE to run

    输入如下命令行 xff1a yum enablerepo 61 epel y install fuse sshfs install from EPEL user 61 w h o a m
  • C++中的虚函数详解

    虚函数在运行时绑定 xff0c 即运行时确定执行的函数 所谓的后期绑定就是一个基类中有一个虚函数 xff0c 而派生类中重写了这个函数 xff0c 那么调用的这个虚函数的时候根据类的实例的不同而调用不同的函数 实例化是指在面向对象的编程中
  • Android中的Log输出

    安卓系统的代码量十分庞大 xff0c 无法使用Jlink之类的工具进行单步调试 xff0c 因而日志系统十分有必要 为此 xff0c 安卓开发了Log日志类用于开发者的日常调试使用 Log中配置了五种Log类 xff0c 分别表示打印五类不
  • C++中的模板类

    什么是模板类 xff1a C 43 43 发展到一定层次后 xff0c 必然有部分代码存在仅传参的数据类型不同而内容一致的情况 因此 xff0c C 43 43 为解决此类场景 xff0c 特推出模板类的使用 模板类是一种泛型技术 xff0
  • 【C/C++】指针赋初值问题

    先说结论 xff1a 指针在使用时一定要进行初始化 一 问题来源 问题提示 xff1a null pointer dereference 此问题在编译时无误 xff0c 在运行 时出的问题 xff0c 排查起来非常头疼 一开始没头绪 xff
  • 【Linux应用编程基础】ioctl函数

    一 为什么需要ioctl函数 在裸机开发中 xff0c 应用程序直接作用于寄存器 而在Linux开发中Linux驱动与Linux应用在代码层级上是分开的 xff0c 在实际开发过程中也是分两拨人开发的 xff0c Linux驱动服务于应用