这与如何使用nix的ioctl有关?但这不是同一个问题。
我想检索一个可变大小的缓冲区。还有一个ioctl
告诉我我需要读取 X 个字节。C 标头也告诉我以下内容:
#define HID_MAX_DESCRIPTOR_SIZE 4096
#define HIDIOCGRDESC _IOR('H', 0x02, struct hidraw_report_descriptor)
struct hidraw_report_descriptor {
__u32 size;
__u8 value[HID_MAX_DESCRIPTOR_SIZE];
};
我通过以下方式定义宏:
ioctl_read_buf!(hid_read_descr, b'H', 0x02, u8);
后来打电话:
let mut desc_raw = [0u8; 4 + 4096];
let err = unsafe { hid_read_descr(file.as_raw_fd(), &mut desc_raw); };
这样做的时候,desc_raw
全是零。我本来希望size
根据结构定义包含前 4 个字节。
替代方案似乎也不起作用
ioctl_read!(hid_read_descr2, b'H', 0x02, [u8; 4+4096]);
// ...
let mut desc_raw = [0xFFu8; 4 + 4096];
let err = unsafe { hid_read_descr2(file.as_raw_fd(), &mut desc_raw); };
在这两种情况下,我都尝试desc_raw
使用 0xFF 进行初始化,并且在调用之后,它似乎没有受到影响。
我是否ioctl_read_buf
错误地使用了宏?