我正在使用 Ruby 和 bit-struct 在测试设置中配置我的网络接口。这适用于大多数 IOCTL 调用,但我不知道如何调用 SIOCGIFCONF
这是一个例子:
如果我想获取接口的 MAC 地址,我会这样写:
class LinuxIfreqMacAddr < BitStruct
char :name, 128
unsigned :type, 16, :endian => :native
hex_octets :macaddr, 48
pad :padding, 64
end
ifr = LinuxIfreqMacAddr.new
ifr.name = "eth0"
s.ioctl(SIOCGIFHWADDR, ifr) # s is a socket
puts ifr.macaddr
这工作正常,并将打印 eth0 的 MAC 地址。但是“struct ifconf”的签名(与 SIOCGIFCONF 一起使用)需要传递一个缓冲区。
这是签名:
struct ifconf {
int ifc_len;
char __user *ifcu_buf;
};
如何从 ruby 调用具有 4096 字节缓冲区的 SIOCGIFCONF ioctl 命令?