在运行下面的代码时,其中一个cpu内核的使用率达到100%。 有或没有交通。 哪里不对?
示例代码:
#include <stdio.h> #include <stdlib.h> #include <pcap.h> #include <errno.h> void my_callback(u_char *args,const struct pcap_pkthdr* pkthdr,const u_char* packet) { //nothing,nothing at all... //printf("+"); } int main(int argc,char **argv) { int i; char *dev; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr; const u_char *packet; struct bpf_program fp; /* hold compiled program */ bpf_u_int32 maskp; /* subnet mask */ bpf_u_int32 netp; /* ip */ if(argc != 2){ fprintf(stdout,"Usage: %s "expression"n",argv[0]); return 0; } /* Now get a device */ dev = pcap_lookupdev(errbuf); if(dev == NULL) { fprintf(stderr,"%sn",errbuf); exit(1); } /* Get the network address and mask */ pcap_lookupnet(dev,&netp,&maskp,errbuf); /* open device for reading in promiscuous mode */ descr = pcap_open_live(dev,BUFSIZ,1,-1,errbuf); if(descr == NULL) { printf("pcap_open_live(): %sn",errbuf); exit(1); } /* Now we'll compile the filter expression*/ if(pcap_compile(descr,&fp,argv[1],netp) == -1) { fprintf(stderr,"Error calling pcap_compilen"); exit(1); } /* set the filter */ if(pcap_setfilter(descr,&fp) == -1) { fprintf(stderr,"Error setting filtern"); exit(1); } /* loop for callback function */ pcap_loop(descr,my_callback,NULL); return 0; }
编译时使用: gcc example.c -o example -lpcap
运行: ./example "tcp"或者你喜欢的filter。
创build一个附加到控制台的进程,但带有redirect的标准IO句柄
如何在写入文件时放置换行符
googletest:如何设置?
正如你所看到的,这是典型的例子,循环的main和callback函数: pcap_loop(descr,NULL);
callback是空的(无用的),但只是表明问题不在callback中。
在QueueUserAPC中指定的callback不会被调用
C中的exec家族函数
在C ++中,我可以使用multithreading工具将UNIX信号与主程序同步吗?
WriteConsole()奇怪的字符?
你在这里指定了timeout -1 :
descr = pcap_open_live(dev,errbuf);
它将pcap_loop变成一个忙碌循环,因为poll立即超时。
如果没有其他值的理由,请使用类似1000 (毫秒)的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。