我正在编写一个程序,在 python 中使用ioctl
.
(参考How to assign IP address to interface in python?和Getting IP address of the beagleboard using python)
由于IOCTL
在 Linux Kernel 中实现的方法需要将所有参数传递到特定的结构中。因此,我将所有这些参数构造为一个结构,然后传递给IOCTL
.
bin_ip = socket.inet_aton('192.168.0.1')
ifreq = struct.pack('16sH2s4s8s', 'eth0', socket.AF_INET, '\x00'*2, bin_ip, '\x00'*8)
在https://docs.python.org/3.0/library/struct.html发现第一个参数的部分含义是 s= char[] and H = unsigned short
数字 16 2 4 8 的s
含义H
编辑:对于 's' 格式字符,计数被解释为字节的长度,例如,16s
表示单个16-byte string
后跟1 unsigned short
, 2-byte string
, 4-byte string
,8-byte string
为什么第四个论点是'\x00\x00'
,最后一个论点是'\x00\x00\x00\x00\x00\x00\x00\x00'
?这是标准格式/预期格式吗?