您的位置:首页 > 编程语言 > Python开发

使用python 实现icmp测试主机存活性

2017-05-12 16:21 225 查看
代码:输出:Original values: (1, 'abc', 2.7)Format string : I3sfUses : 12 bytesPacked Value : 0100000061626300cdcc2c40Unpacked Type : <type 'tuple'> Value: (1, 'abc', 2.700000047683716)代码中,首先定义了一个元组数据,包含int、string、float三种数据类型,然后定义了struct对象,并制定了format‘I3sf’,I表示int,3s表示三个字符长度的字符串,f 表示float。最后通过struct的pack和unpack进行打包和解包。通过输出结果可以发现,value被pack之后,转化为了一段二进制字节串,而unpack可以把该字节串再转换回一个元组,但是值得注意的是对于float的精度发生了改变,这是由一些比如操作系统等客观因素所决定的。打包之后的数据所占用的字节数与C语言中的struct十分相似。
select 模块:
Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统)

select方法:

进程指定内核监听哪些文件描述符(最多监听1024个fd)的哪些事件,当没有文件描述符事件发生时,进程被阻塞;当一个或者多个文件描述符事件发生时,进程被唤醒。当我们调用select()时:  1 上下文切换转换为内核态  2 将fd从用户空间复制到内核空间  3 内核遍历所有fd,查看其对应事件是否发生  4 如果没发生,将进程阻塞,当设备驱动产生中断或者timeout时间后,将进程唤醒,再次进行遍历  5 返回遍历后的fd  6 将fd从内核空间复制到用户空间fd:file descriptor 文件描述符
fd_r_list, fd_w_list, fd_e_list = .秒,之后返回三个空列表,如果监听的句柄有变化,则直接执行。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python icmp