摘錄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; } .... }