问题标签 [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.
mono - 将 Linux ioctl 与 Mono 一起使用
我正在尝试通过 Mono 框架执行 ioctl 命令,但我找不到我要找的东西。
我正在尝试向具有内核模块的 DVB 卡发送命令。我希望有人可以链接或清楚地解释如何做到这一点。我猜任何使用内核模块的 Mono 示例都会很有用。
c - unlocked_ioctl 与普通 ioctl
在我的驱动程序的 file_operations 结构中,我有:
即没有使用ioctl 字段。这足以避免大内核锁并在没有任何同步的情况下进入 device_ioctl() 吗?或者我是否也必须更改代码的用户空间部分中的 ioctl() 调用?
c# - 使用 IOCTL_DVD_* 控制代码从 C# 调用 DeviceIoControl
我正在尝试从 C# 调用 DeviceIoControl 以获取IOCTL_DVD_*
控制代码。阅读了大量信息并尝试了许多示例后,我没有取得太大进展。
我最终要做的是获得DVD_LAYER_DESCRIPTOR
有关 DVD 驱动器中当前媒体的结构。我可以CreateFile
在 DVD 设备上成功调用,但是当我尝试DeviceIoControl
使用控制代码调用时,IOCTL_DVD_START_SESSION
它返回一个成功代码,但我似乎没有成功返回 sessionId 值,总是返回 0。(然后我所做的任何尝试尝试获取失败的层描述IOCTL_DVD_READ_STRUCTURE
,即函数失败或返回成功但给出空白输出结构。)
在找到一些进行类似调用的 C 代码后,我能够编译此代码(使用 Visual C++ 2008 速成版)并且它成功地能够启动会话、读取DVD_LAYER_DESCRIPTOR
并关闭会话而没有问题,所以我知道这是可行的。
C# 问题似乎与外部函数的定义方式和参数的编组方式有关。以及如何定义传递和返回的各种结构。
我查看了 www.pinvoke.net 以了解他们如何定义它,并使用了一些示例代码和给出的定义,但仍然存在与上述相同的问题。部分问题似乎是每个 IOCTL 控制代码的参数都不同,主要是结构,但IOCTL_DVD_START_SESSION
输出值是 32 位整数。如何定义 C# 中的外部方法来处理这些不同的情况?此外,使用正确大小的成员类型定义的各种结构显示它们在 C 和 C# 代码之间的大小不同,但各个成员的大小相同???
如果我使用类似的程序DeviceIOView
并观察 C 代码和 C# 代码对IOCTL_DVD_START_SESSION
C 版本的调用返回 3 的 sessionid 并且 DeviceIOView 显示运行 C# 代码时发送回的数据也是 3 所以似乎有一些返回参数的编组问题,因为我们在 C# 代码中只看到 0
有人对如何从 C# 调用 DeviceIoControl 以访问 DVD 信息有任何想法或工作示例代码吗?(显示应该如何定义和使用结构和功能。)任何指向有用网站或其他建议的链接将不胜感激。
(在 Visual C# 2008 Express Edition,.NET 3.5 中开发。)
N约翰斯
示例代码(添加)
要运行此代码,您需要在命令行上指定 DVD 驱动器的驱动器号。
输出
第一个版本在两次调用中都失败,并带有给定的错误代码:
122 - ERROR_INSUFFICIENT_BUFFER
87 - ERROR_INVALID_PARAMETER
第二个版本似乎成功了,但 SessionId 的值为 -10,即初始化值。(从 MSDN 这个值应该在 -1 和 3 之间?)结束会话也成功了。
[注意:第二个版本的启动会话似乎只在其他所有调用中成功,不知道为什么,但这似乎也是我拥有的 C 代码中的一个问题,因为它的错误处理是重试。]
linux - 将自定义结构类型添加到 strace
我正在尝试对通过 ioctl 系统调用与内核驱动程序交互的用户模式共享对象进行反向工程。我有一个包含内核驱动程序ioctl 接口定义的头文件(即#defines 用于ioctl 命令号,以及用于发送到ioctl 的各种数据的结构定义)。
我看到 strace 能够取消引用传递给系统调用的用户指针,但它显然不能取消引用传递给 ioctl 的自定义结构。有没有一种简单的方法可以将我的定义添加到 strace 中,以便我可以将有意义的数据传递给 ioctl,而不仅仅是一个指针地址?
我有 strace 的源代码并已成功编译/安装它,但我所有尝试包含自己的标头都没有效果。
macos - 如何在osx的/ dev中找到键盘
在linux/ubuntu上,键盘和鼠标设备都在/dev/input/by-path/ osx中挂载的键盘设备在哪里?我添加了一个 USB 键盘,但 /dev 文件夹中没有添加任何设备。它位于其他地方,还是完全无法访问?谢谢。
编辑:我能够使用 libusb:
046d:c315 (bus 26, device 3) 和来自苹果的开发人员工具中的 usb 探测器在键盘上获取一些信息......
但是他们都没有提到 /dev 特殊文件或其他方式访问它。
ruby - 在 ruby 中通过 ioctl 获取 essid
为了避免依赖无线工具,我想使用 ioctl 直接从设备获取 essid,在 C 中这不是问题,但在 Ruby 中则完全不同。
问题是来自wireless.h的结构,它被用作ioctl的输入/回复:
指针部分必须是内存区域的有效地址,后跟以字节为单位的长度,然后是标志字段。我尝试使用 Array#pack 和 bit-struct gem,但还没有找到解决方案。
有没有办法绕过这个内存指针问题?
c++ - Linux ioctl -> 如何判断当前 IP 是否由 dhcp 获取
我正在摆弄套接字 ioctl 以获取当前接口设置,并且我已经可以获取 IP、接口名称、网络掩码并检查接口是启动还是关闭(我只是对 SIOCGIFCONF、SIOCGIFNETMASK 和 SIOCGIFFLAGS 执行 IOCTl)。
我正在寻找一种方法来判断我当前的 IP 地址是通过 dhcp 获得还是静态的。
我可以检查 /etc/network/interfaces 以获取我想要的所有内容,但我正在寻找一种以编程方式执行此操作的方法(这个词是否存在?)。
有没有人对此有任何见解?
还有一件事,我正在使用 Linux(目前)。
干杯
perl - “设备的 ioctl 不合适”
我有一个在 AIX 机器中运行的 Perl 脚本。
该脚本尝试从某个目录打开一个文件,但由于文件没有读取权限而无法读取该文件,但我收到一个不同的错误消息inappropriate ioctl for device
。
它不应该说类似no read permissions for file
或类似的东西吗?
这条inappropriate ioctl for device
消息是什么意思?
我该如何解决?
编辑:这是我做的时候发现的strace
。
terminal - 你如何获得 Go 中的终端大小?
如何在 Go 中获取终端大小。在 C 中,它看起来像这样:
但是我如何在 Go 中访问 TIOCGWINSZ
macos - 是否有相当于 FreeBSD 的 make_dev() 函数的 OS X?
我正在尝试将一些代码从 FreeBSD 移植到 OS X。该代码相当低级,它make_dev()
使用诸如ioctl()
.
理想情况下,我希望我的代码尽可能接近原始代码,以便将来可以更轻松地合并上游更改:我的问题是,有没有办法在 OS X 上创建此类设备文件?根据维基百科,该平台支持该成语。有人可以指出我正确的方向吗?