似乎IO#ioctl
改变了通过的第二个参数。
require "socket"
SIOCGIWESSID = 0x8B1B
IW_ESSID_MAX_SIZE = 32
sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
template = "a16pI2"
iwessid = [ 'wlan0', ' ' * IW_ESSID_MAX_SIZE, IW_ESSID_MAX_SIZE, 1 ].pack(template)
iwessid_bak = iwessid.dup
p iwessid == iwessid_bak # true
sock.ioctl(SIOCGIWESSID, iwessid) # iwessid string changed after #ioctl
p iwessid == iwessid_bak # false !
p iwessid, iwessid_bak # iwessid is different, lot of zero chars \0x00
# appended to original content
这是预期的行为还是错误?用新的 Ruby 2.1.3 测试。