- 论坛徽章:
- 0
|
想获得本机ip,代码是论坛里以前贴出来的,稍微改了一下。
我的问题是,
总共有三个接口,eth0,eth1,lo,都是up的。
但是程序显示都是DOWN的,
我man了netdevice,没有问题,gdb了一下,发现运行时struct ifreq好像没有ifr_flags,有一个ifru_flags,但是换了这个又编译不过去,
这是怎么回事?
代码如下:(rh8.0)
#include <stdio.h>;
#include <sys/types.h>;
#include <sys/param.h>;
#include <sys/ioctl.h>;
#include <sys/socket.h>;
#include <net/if.h>;
#include <netinet/in.h>;
#include <net/if_arp.h>;
void get_ip()
{
struct ifreq if_buf[16];
struct ifconf ifc;
int fd, interface;
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >; 0)
{
ifc.ifc_len = sizeof(if_buf);
ifc.ifc_buf = (caddr_t)if_buf;
if (!ioctl (fd, SIOCGIFCONF, (char *)&ifc))
{
interface = ifc.ifc_len/sizeof(struct ifreq);
printf("%d interfaces\n", interface);
while (interface-- >; 0)
{
printf ("net device %s\n", if_buf[interface].ifr_name);
if (if_buf[interface].ifr_flags & IFF_UP)
puts("the interface status is UP" ;
else
puts("the interface status is DOWN" ;
if (!(ioctl (fd, SIOCGIFADDR, (char *) &if_buf[interface])))
{
puts ("IP address is:" ;
puts(inet_ntoa(((struct sockaddr_in*)(&if_buf[interface].ifr_addr))->;sin_addr));
puts("" ;
//puts (buf[interface].ifr_addr.sa_data);
}
}
}
}
}
main()
{
get_ip();
} |
|