fbpx
维基百科

ioctl

在计算中,ioctl 是对设备特定的输入/输出操作和其他不能用常规系统调用表达的操作的系统调用。 它需要一个指定请求代码的参数; 调用的效果完全取决于请求代码。 请求代码通常是特定于设备的。

例如,可以指示物理设备弹出光盘的 CD-ROM 设备,则驱动程序将提供 ioctl 请求代码来执行此操作。 与设备无关的请求代码有时用于让用户空间访问仅由核心系统软件使用或仍在开发中的内核功能。 ioctl 系统调用以该名称首次出现在 Unix 版本 7 中。 大多数 Unix 和类 Unix 系统都支持它,包括 LinuxmacOS,但可用的请求代码因系统而异。Microsoft Windows 在其 Win32 API 中提供了一个类似的函数,名为“DeviceIoControl”。

背景

传统的操作系统可以分为两层,用户空间内核文本编辑器等应用程序代码驻留在用户空间,而操作系统的底层设施(如网络堆栈)驻留在内核中。 内核代码处理敏感资源并实现应用程序之间的安全性和可靠性屏障; 因此,操作系统会阻止用户模式应用程序直接访问内核资源。 用户空间应用程序通常通过系统调用向内核发出请求,其代码位于内核层。

系统调用通常采用“系统调用向量”的形式,其中用索引号指示所需的系统调用。 例如,exit() 可能是 1 号系统调用,而 write() 号是 4。系统调用向量然后用于为请求找到所需的内核函数。 这样,传统的操作系统通常会向用户空间提供数百个系统调用。

尽管系统调用是访问标准内核设施的权宜之计,但系统调用有时不适用于访问非标准硬件外围设备。 必然地,大多数硬件外围设备(也称为设备)只能在内核中直接寻址。 但是用户代码可能需要直接与设备通信; 例如,管理员可能会在以太网接口上配置媒体类型。 现代操作系统支持多种设备,其中许多设备提供大量功能。 内核设计者可能没有预见到其中一些设施,因此内核很难提供使用这些设备的系统调用。

为了解决这个问题,内核被设计成可扩展的,并且可以接受一个额外的模块,称为设备驱动程序,它运行在内核空间,可以直接寻址设备。 ioctl 接口是一个单一的系统调用,用户空间可以通过它与设备驱动程序进行通信。 设备驱动程序上的请求根据此 ioctl 系统调用进行引导,通常通过设备句柄和请求编号进行引导。 因此,基本内核可以允许用户空间访问设备驱动程序,而无需了解设备支持的设施,也不需要难以管理的大量系统调用。

使用

硬件设备配置

ioctl 的一个常见用途是控制硬件设备。例如,在 Win32 系统上,ioctl 调用可以与 USB 设备通信,或者它们可以发现附加存储设备的驱动器几何信息。

OpenBSDNetBSD 上,bio(4) 伪设备驱动程序和 bioctl 实用程序使用 ioctl 在类似于 ifconfig 的统一供应商不可知接口中实现 RAID 卷管理。[1][2]在 NetBSD 上,ioctl 也被 sysmon 框架使用。[3]

终端

在向最终用户应用程序公开的代码中,ioctl 的一种用途是终端 I/O。 Unix 操作系统传统上大量使用命令行界面。 Unix 命令行界面建立在伪终端 (ptys) 之上,它模拟硬件文本终端,例如 VT100s。 使用 ioctl 调用,可以像硬件设备一样控制和配置 pty。 例如,pty 的窗口大小是使用 TIOCSWINSZ 调用设置的。TIOCSTI(terminal I/O control,模拟终端输入)的ioctl函数可以将一个字符压入设备流

参考文献

  1. ^ Super User's BSD Cross Reference: /OpenBSD/share/man/man4/bio.4. bxr.su. [2023-01-09]. (原始内容于2022-10-01). 
  2. ^ Super User's BSD Cross Reference: /OpenBSD/sbin/bioctl/bioctl.8. bxr.su. [2023-01-09]. (原始内容于2023-01-09). 
  3. ^ sysmon(4) — system monitoring and power management interface. NetBSD. An ioctl(2) interface available via /dev/sysmon. 

ioctl, 此條目可参照英語維基百科相應條目来扩充, 若您熟悉来源语言和主题, 请协助参考外语维基百科扩充条目, 请勿直接提交机械翻译, 也不要翻译不可靠, 低品质内容, 依版权协议, 译文需在编辑摘要注明来源, 或于讨论页顶部标记, href, template, translated, page, html, title, template, translated, page, translated, page, 标签, 在计算中, 是对设备特定的输入, 输出操作和其他不能用常规系统调用表达的操作的系统调用,. 此條目可参照英語維基百科相應條目来扩充 若您熟悉来源语言和主题 请协助参考外语维基百科扩充条目 请勿直接提交机械翻译 也不要翻译不可靠 低品质内容 依版权协议 译文需在编辑摘要注明来源 或于讨论页顶部标记 a href Template Translated page html title Template Translated page Translated page a 标签 在计算中 ioctl 是对设备特定的输入 输出操作和其他不能用常规系统调用表达的操作的系统调用 它需要一个指定请求代码的参数 调用的效果完全取决于请求代码 请求代码通常是特定于设备的 例如 可以指示物理设备弹出光盘的 CD ROM 设备 则驱动程序将提供 ioctl 请求代码来执行此操作 与设备无关的请求代码有时用于让用户空间访问仅由核心系统软件使用或仍在开发中的内核功能 ioctl 系统调用以该名称首次出现在 Unix 版本 7 中 大多数 Unix 和类 Unix 系统都支持它 包括 Linux 和 macOS 但可用的请求代码因系统而异 Microsoft Windows 在其 Win32 API 中提供了一个类似的函数 名为 DeviceIoControl 目录 1 背景 2 使用 2 1 硬件设备配置 2 2 终端 3 参考文献背景 编辑传统的操作系统可以分为两层 用户空间和内核 文本编辑器等应用程序代码驻留在用户空间 而操作系统的底层设施 如网络堆栈 驻留在内核中 内核代码处理敏感资源并实现应用程序之间的安全性和可靠性屏障 因此 操作系统会阻止用户模式应用程序直接访问内核资源 用户空间应用程序通常通过系统调用向内核发出请求 其代码位于内核层 系统调用通常采用 系统调用向量 的形式 其中用索引号指示所需的系统调用 例如 exit 可能是 1 号系统调用 而 write 号是 4 系统调用向量然后用于为请求找到所需的内核函数 这样 传统的操作系统通常会向用户空间提供数百个系统调用 尽管系统调用是访问标准内核设施的权宜之计 但系统调用有时不适用于访问非标准硬件外围设备 必然地 大多数硬件外围设备 也称为设备 只能在内核中直接寻址 但是用户代码可能需要直接与设备通信 例如 管理员可能会在以太网接口上配置媒体类型 现代操作系统支持多种设备 其中许多设备提供大量功能 内核设计者可能没有预见到其中一些设施 因此内核很难提供使用这些设备的系统调用 为了解决这个问题 内核被设计成可扩展的 并且可以接受一个额外的模块 称为设备驱动程序 它运行在内核空间 可以直接寻址设备 ioctl 接口是一个单一的系统调用 用户空间可以通过它与设备驱动程序进行通信 设备驱动程序上的请求根据此 ioctl 系统调用进行引导 通常通过设备句柄和请求编号进行引导 因此 基本内核可以允许用户空间访问设备驱动程序 而无需了解设备支持的设施 也不需要难以管理的大量系统调用 使用 编辑硬件设备配置 编辑 ioctl 的一个常见用途是控制硬件设备 例如 在 Win32 系统上 ioctl 调用可以与 USB 设备通信 或者它们可以发现附加存储设备的驱动器几何信息 在 OpenBSD 和 NetBSD 上 bio 4 伪设备驱动程序和 bioctl 实用程序使用 ioctl 在类似于 ifconfig 的统一供应商不可知接口中实现 RAID 卷管理 1 2 在 NetBSD 上 ioctl 也被 sysmon 框架使用 3 终端 编辑 在向最终用户应用程序公开的代码中 ioctl 的一种用途是终端 I O Unix 操作系统传统上大量使用命令行界面 Unix 命令行界面建立在伪终端 ptys 之上 它模拟硬件文本终端 例如 VT100s 使用 ioctl 调用 可以像硬件设备一样控制和配置 pty 例如 pty 的窗口大小是使用 TIOCSWINSZ 调用设置的 TIOCSTI terminal I O control 模拟终端输入 的ioctl函数可以将一个字符压入设备流 参考文献 编辑 Super User s BSD Cross Reference OpenBSD share man man4 bio 4 bxr su 2023 01 09 原始内容存档于2022 10 01 Super User s BSD Cross Reference OpenBSD sbin bioctl bioctl 8 bxr su 2023 01 09 原始内容存档于2023 01 09 sysmon 4 system monitoring and power management interface NetBSD An ioctl 2 interface available via dev sysmon 取自 https zh wikipedia org w index php title Ioctl amp oldid 75617433, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。