文件名称:其他函数-数字逻辑电路的asic设计
文件大小:2.83MB
文件格式:PDF
更新时间:2024-06-22 12:30:29
LINUX 嵌入式
(2)其他函数 下面的函数也是ping 程序中用到的重要函数。首先catcher 函数是用户在发送SIGINT 时调用的函数,在该函数中又调用了SIGALARM信号的处理来结束程序。 static void catcher(int ignore) { int waittime; (void)ignore; pinger(); /*调用catcher函数*/ (void)signal(SIGALRM, catcher); if (!npackets || ntransmitted < npackets) alarm((u_int)interval); else { if (nreceived) { waittime = 2 * tmax / 1000; 华清远见——嵌入式培训专家http://www.farsight.com.cn 华清远见<嵌入式Linux应用开发班>培训教材 if (!waittime) waittime = 1; if (waittime > MAXWAIT) waittime = MAXWAIT; } else waittime = MAXWAIT; /*调用finish函数,并设定一定的等待实践*/ (void)signal(SIGALRM, finish); (void)alarm((u_int)waittime); } } Pinger 函数也是一个非常重要的函数,用于形成ICMP回应数据包,其中ID 是该进程的 ID,数据段中的前8 字节用于存放时间间隔,从而可以计算ping程序从对端返回的往返时 延 差,这里的数据校验用到了后面定义的in_cksum函数。其代码如下所示: static void pinger(void) { register struct icmphdr *icp; register int cc; int i; /*形成icmp信息包,填写icmphdr结构体中的各项数据*/