⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getifstats.c

📁 miniupnpd可以在嵌入式linux中实现upnp功能
💻 C
字号:
/* $Id: getifstats.c,v 1.5 2007/12/20 11:53:05 nanard Exp $ *//* MiniUPnP project * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ * (c) 2006,2007 Thomas Bernard  * This software is subject to the conditions detailed * in the LICENCE file provided within the distribution */#include <stdio.h>#include <stdlib.h>#include <syslog.h>#include <string.h>#include <time.h>#include "../getifstats.h"#include "../config.h"intgetifstats(const char * ifname, struct ifdata * data){	FILE *f;	char line[512];	char * p;	int i;	int r = -1;#ifdef ENABLE_GETIFSTATS_CACHING	static time_t cache_timestamp = 0;	static struct ifdata cache_data;	time_t current_time;#endif	data->baudrate = 4200000;	data->opackets = 0;	data->ipackets = 0;	data->obytes = 0;	data->ibytes = 0;#ifdef ENABLE_GETIFSTATS_CACHING	current_time = time(NULL);	if(current_time == ((time_t)-1)) {		syslog(LOG_ERR, "getifstats() : time() error : %m");	} else {		if(current_time < cache_timestamp + GETIFSTATS_CACHING_DURATION) {			memcpy(data, &cache_data, sizeof(struct ifdata));			return 0;		}	}#endif	f = fopen("/proc/net/dev", "r");	if(!f) {		syslog(LOG_ERR, "getifstats() : cannot open /proc/net/dev : %m");		return -1;	}	/* discard the two header lines */	fgets(line, sizeof(line), f);	fgets(line, sizeof(line), f);	while(fgets(line, sizeof(line), f)) {		p = line;		while(*p==' ') p++;		i = 0;		while(ifname[i] == *p) {			p++; i++;		}		/* TODO : how to handle aliases ? */		if(ifname[i] || *p != ':')			continue;		p++;		while(*p==' ') p++;		data->ibytes = strtoul(p, &p, 0);		while(*p==' ') p++;		data->ipackets = strtoul(p, &p, 0);		/* skip 6 columns */		for(i=6; i>0 && *p!='\0'; i--) {			while(*p==' ') p++;			while(*p!=' ' && *p) p++;		}		while(*p==' ') p++;		data->obytes = strtoul(p, &p, 0);		while(*p==' ') p++;		data->opackets = strtoul(p, &p, 0);		r = 0;		break;	}	fclose(f);#ifdef ENABLE_GETIFSTATS_CACHING	if(r==0 && current_time!=((time_t)-1)) {		cache_timestamp = current_time;		memcpy(&cache_data, data, sizeof(struct ifdata));	}#endif	return r;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -