摘錄busybox裡面ifconfig(networking/interface.c)的source code。看起來也是去讀/proc/net/dev這個檔之後再去抓它裡面的一些資料。另外目前我是抓最新的版本,已經把user_net_device_stats的rx_packetse宣告成
unsigned long long,看來應該不會有超過4G會歸零的問題了。
關於如何利用ifconfig讀取網路device的資料,可以特別注意下列function的使用
- if_readlist_proc:用來parse /proc/net/dev
- add_interface:加dev到link list
- get_dev_fields: 將/proc/net/dev作正規畫處理
#define _PATH_PROCNET_DEV "/proc/net/dev"
static int if_readlist_proc(char *target)
{
....
fh = fopen_or_warn(_PATH_PROCNET_DEV, "r");
if (!fh) {
return if_readconf();
}
fgets(buf, sizeof buf, fh); /* eat line */
fgets(buf, sizeof buf, fh);
procnetdev_vsn = procnetdev_version(buf);
err = 0;
while (fgets(buf, sizeof buf, fh)) {
char *s, name[128];
s = get_name(name, buf);
ife = add_interface(name);
get_dev_fields(s, ife, procnetdev_vsn);
ife->statistics_valid = 1;
if (target && !strcmp(target, name))
break;
}
....
}

