为了避免依赖无线工具,我想使用 ioctl 直接从设备获取 essid,在 C 中这不是问题,但在 Ruby 中则完全不同。
问题是来自wireless.h的结构,它被用作ioctl的输入/回复:
struct iw_point
{
void __user *pointer; /* Pointer to the data (in user space) */
__u16 length; /* number of fields or size in bytes */
__u16 flags; /* Optional params */
};
指针部分必须是内存区域的有效地址,后跟以字节为单位的长度,然后是标志字段。我尝试使用 Array#pack 和 bit-struct gem,但还没有找到解决方案。
有没有办法绕过这个内存指针问题?