|
蓝森林 http://www.lslnet.com 2006年6月6日 10:18
请教:如何在程序里取网络接口列表及属性?
我的系统是REDHAT LINUX 8,需要取像ifconfig -a命令显示的东东。
多谢了! |
请教:如何在程序里取网络接口列表及属性?
man ioctl |
请教:如何在程序里取网络接口列表及属性?
这个问题已经解决,我把调试过的代码公布上来,供后来者参考。
我还需要取这个接口的速度,如:是100M还是1000M,如何做到?
ioctl好像无能为力呀?
int get_interface ()
{
int soc;
struct ifconf ifc;
struct ifreq ifreq [32];
if ((soc = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
fprintf(stderr, "socket(AF_INET): %s\n",strerror(errno));
return -10;
}
bzero((char *) &ifc, sizeof(ifc));
ifc.ifc_len = sizeof(ifreq);
ifc.ifc_buf = (char*) ifreq;
if (ioctl(soc, SIOCGIFCONF, (char *) &ifc) < 0)
{
fprintf(stderr, "ioctl (SIOCGIFCONF): %s\n",strerror(errno));
return -20;
}
int len = ifc.ifc_len/sizeof(struct ifreq);
for (int i=0; i<len; i++)
{
ifc.ifc_len = sizeof(ifreq[i]);
ifc.ifc_buf = (char*) &ifreq [i];
struct ifreq tmp;
strcpy (tmp.ifr_name, ifreq[i].ifr_name);
if (ioctl(soc, SIOCGIFFLAGS, (char *) &tmp) < 0)
{
fprintf(stderr, "ioctl (SIOCGIFFLAGS): %s\n",
strerror(errno));
continue;
}
if ((tmp.ifr_flags & IFF_UP) && !(tmp.ifr_flags & IFF_LOOPBACK) &&
ifreq [i].ifr_addr.sa_family == AF_INET)
{
struct sockaddr_in *inet_addr =
(struct sockaddr_in *) &(ifreq [i].ifr_addr);
printf("%s: %s\n", ifreq [i].ifr_name,
inet_ntoa(inet_addr->;sin_addr));
}
}
close(soc);
} |
请教:如何在程序里取网络接口列表及属性?
顶一下! |
请教:如何在程序里取网络接口列表及属性?
为什么要顶..楼上的不是给你一个例子了吗? |
请教:如何在程序里取网络接口列表及属性?
请仔细看下,楼上就是我发的贴呀,我还请教一下:
我还需要取这个接口的速度,如:是100M还是1000M,如何做到? |
| |