在我的电脑上有3G,Wifi和LAN端口。 我想build立一个Linux软件来显示绿色,如果有networkingstream量和红色的没有networkingstream量。
TCPDUMP可以提供实时统计信息,但会产生较高的CPU负载。 所以我想知道是否可以通过软件中断得到实时统计数据? 每当有networkingstream量时,就会产生一个软件中断。
提前致谢
我不知道你是否会称这是一个软件中断,但你可以参考下面的例子。 (poll()的第三个参数是以毫秒为单位的时间,在该时间之后网络被认为是不活动的。)
/* compile with -lpcap */ /* run as root */ #include <stdio.h> #include <sys/poll.h> #include <pcap.h> int main(int argc, char *argv[]) { int color = 0; struct pollfd ufd; struct pcap_pkthdr h; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *p = pcap_open_live(NULL, 0, 0, 0, errbuf); if (!p) return puts(errbuf), 1; ufd.fd = pcap_fileno(p); ufd.events = POLLIN; for (; ; ) switch (poll(&ufd, 1, 100)) { case -1: perror("poll"); return 1; case 0: if (color) color = 0, puts("red"); break; default: if (!color) color = 1, puts("green"); pcap_next(p, &h); } }