问题标签 [ioctl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
861 浏览

windows - 如何在 Windows 中以 Linux 风格 /dev/sdXY 打开分区?

如何在 Windows a la Linux 风格 /dev/sdXY中打开分区?目前我正在打开\\\\.\\PhysicalDrive%d然后调用DeviceIoControl(IOCTL_DISK_GET_DRIVE_LAYOUT, ...)以获取分区布局,并存储包含文件系统的区域的偏移量和大小。在我的代码中,我将设备上的 IO 操作偏移到分区的偏移量。

此外,如何消除明显的同步行为?Windows 上的物理驱动器原始设备上的操作非常缓慢,我希望操作系统在可能的情况下进行缓存。

0 投票
3 回答
2191 浏览

c - 为什么在 ioctl 命令中从用户空间复制结构失败?

我正在开发设备驱动程序,需要使用 IOCTL。不幸的是,我无法从用户空间复制结构。这是代码(简化,删除了错误处理):

结构

应用

内核模块

最好的问候,
奥利弗·哈纳皮

0 投票
1 回答
3258 浏览

python - 不允许操作

我想在 python 脚本中运行一些命令

我已经设置a+rw好了,/dev/console但是当我从普通用户运行脚本时:

fcntl.ioctl(console_fd, KDSETLED, SCR_LED) IOError: [Errno 1] Operation not allowed

如果我需要从普通用户运行该脚本,我该怎么办?

0 投票
4 回答
6171 浏览

linux - 什么是网络 ioctl 手册页?

我想使用 ioctl SIOCGIFADDR 来确定 Linux 中接口的地址。我找到了一些解释如何做到这一点的网络参考资料,但似乎我的系统上应该已经有一些参考资料了。是否有描述 SIOCGIFADDR 和朋友的手册页(或其他内容)?man netdevice很接近,但它没有相关的 ioctl。

0 投票
1 回答
1186 浏览

c++ - 串行 Mac OS X 不断冻结/锁定/消失 USB 到 Arduino

我的 C++ 代码在使用 AMSerial 库和通用 C(ioctl、termios)的Xcode中运行时遇到问题。

重新启动后,我的应用程序运行良好,但在我“杀死”程序后,串行(我认为)没有发布。

我检查了我打开的文件,/dev并从那里终止了与串行 USB 的连接,但我的 C++ 仍然无法打开 USB 端口。

我已将其缩小为一个低级别的 Mac OS X 问题,关于无限期地阻塞端口,无论使用上述库关闭它。

就上下文而言,我试图通过我的 USB 端口以 9600 波特串行发送数字到Arduino Duemilanove。在 Arduino 中运行串行监视器非常好,但是,通过 C++ 应用程序运行它会冻结我的计算机,有时,我的鼠标/键盘会冻结:需要硬重置。

如何解决这个问题?似乎 Mac OS X 对 USB 不友好!

0 投票
3 回答
31755 浏览

windows - 将 ATA 命令直接发送到 Windows 中的设备?

我正在尝试将 ATA 命令发送到 Windows 中的物理磁盘,并从设备获取响应。

注意:在这种情况下,我想发送IDENTIFY DEVICE(0xEC) 命令。该设备将响应一个 512 字节的数据块。(特别是我对第 119 字的第 0 位感兴趣——设备对命令的支持TRIM)。

我知道我需要使用CreateFile来打开设备:

但在此之后,我不知道该怎么做。

我考虑过0xEC使用发送[DeviceIoControl][4]

但这是完全错误的。发送到DeviceIoControl的 IoControlCode必须是有效的 IO_CTL,它是使用宏构建的

查看 SDK,有许多有效的磁盘管理控制代码,例如:

  • IOCTL_DISK_CREATE_DISK
  • IOCTL_DISK_GET_DRIVE_GEOMETRY
  • IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
  • IOCTL_DISK_GET_PARTITION_INFO
  • IOCTL_STORAGE_QUERY_PROPERTY

但它们都不是IDENTIFY DEVICE命令,也不是返回它返回的任何东西。

所以我相信我必须使用一些“原始”的方法来发送命令。


环顾四周,我遇到了无证 IOCTL

当您分解 IOCTL 部分时,这意味着:

但是在任何地方都没有关于inputBuffer必须包含什么、它的大小、outputBuffer它将包含什么或它需要什么的文档。我也不知道functionCode34 (0x22) 是什么。


我的问题:如何向 ATA 设备发送原始 ATA 命令(例如 0xEC)并读取其响应?

也可以看看


答案片段

打开具有读写访问权限的驱动器:

设置一个ATA_PASS_THROUGH_EX结构作为我们的输入缓冲区以与IOCTL_ATA_PASS_THROUGHIO 控制代码一起使用:

设置一个输出缓冲区来保存我们预期的来自驱动器的 512 字节响应:

致电DeviceIoControl

关闭文件句柄:

0 投票
1 回答
2920 浏览

android - ioctl LOOP_SET_FD 失败

ioctl LOOP_SET_FD 失败

我已经问过类似的问题,但我在这里写了更多细节

为了在 android 中运行 ubuntu,我使用 rootstock rootstock -f kty1104-ThinkPad-Z60t -l kty1104 -p 1 --imagesize 2047M --notarball --seed linux-image-omap,lxde,build-essential 创建了一个 img 文件, openssh-server,tightvncserver,x11-xserver-utils

这个 img 可以通过 sudo mount -o loop,noatime -t ext2 /home/kty1104/ubuntu.img /mnt 在我的 ubuntu PC 上 chroot sudo mount -t proc proc /mnt/proc chroot /mnt /bin/bash

但是当我在我的 android 上尝试这个 mount ~ chroot 命令时,它说,ioctl LOOP_SET_FD failed: Bad file number on mount 命令,当我只是强制 chroot 时,它说“段错误”

我认为问题来自 rootstock 命令有人可以帮助我吗?

0 投票
1 回答
4007 浏览

c++ - 在 C++ 中使用 open 和 i2c

我已经意识到这一点open()并且ioctl()在 cpp 对象中不起作用。如果在我的main()函数中调用它,我可以执行该操作,但在我的任何类中都不能。我有一个在我的主循环中运行的对象,它有另一个进行文件系统调用的对象。

所以基本上在主循环中它可以打开(我得到一个 3 的指针并且ioctl是成功的)。但是,当我在对象中执行此操作时,它会为打开返回 0(这应该不是错误)并且 ioctl 失败。

我知道我不能使用ios::iostream 选项,因为它们不适用于ioctl. 如何使常规 ioctl 在 cpp 对象中工作?

0 投票
2 回答
33559 浏览

c - 使用 SIOCSIFADDR ioctl 设置 IP 地址

我正在尝试使用 Linux 上的 IOCTL 接口获取和设置 IP 地址。我能够成功获取并设置它。当我设置 IP 地址时, ifconfig eth0显示正确的 IP 地址,但随后系统断开连接。即系统无法ping通。这是我设置IP地址的代码。如果我遗漏了什么,请告诉我。

0 投票
2 回答
486 浏览

unix - AIX 是否支持 SIOCGLIFCONF?

要探测 IPv4 中的网络适配器属性,我们可以使用 SIOCGIFONF、SIOCGIFNETMASK 等。在 HP-UX 和 Solaris 上,IPv6 等效项是 SIOCGLIFONF、SIOCGLIFNETMASK。

AIX 是否支持这些 ioctl(可能带有 APAR)或者它们是否被称为不同的东西?

指向标准文档的指针会有所帮助 - 我用谷歌搜索但没有找到任何东西。