我正在编写一个程序,在python中使用ioctl
为beaglebone black分配IP地址。在
(参考How to assign IP address to interface in python?和Getting IP address of the beagleboard using python)
因为在Linux内核中实现的IOCTL
方法需要将所有参数传递到特定的结构中。因此,我将所有这些参数构造为一个结构,然后传递给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
用s
和H
写的数字16 2 4 8的意思是什么
编辑:对于'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'
?这是标准格式/预期格式吗?在
这里打包的结构似乎是ifreq,其中设置了字段“ifr_name”和“ifr_addr”eth0'为“ifr_name”设置,其余为“ifr_addr”。在
如果addr是一个sockaddr,在本例中我假设实际上是一个sockaddr_in。基于this page的字段有:
在你的代码里插座设定仙奴家族。然后第四个参数2个0是端口,很可能在这里设置了IP地址,因此它不是特定于端口的。然后是ip地址,最后是8个零。在
相关问题 更多 >
编程相关推荐