/*
在Unix和Linux系统下有两种方法可以获得系统IP地址(gethostbyname和ioctl)
gethostbyname通过域名解析获取对应计算机的网络地址,ioctl是一系列的网络函数获得本机的IP
(推荐使用ioctl方法,这个方法能给出的ip与ifconfig命令显示的ip一致,并且能不经修改的在arm板上正常运行。
而 gethostname()联合gethostbyname()方法给出的ip与ifconfig给出的并不一致,无法使用[还不懂为什么],并且在 arm板上不能正确运行。)
ioctl范例程序
*/
#include < stdio.h >
#include < sys / types.h >
#include < net / if .h >
#include < netinet / in .h >
#include < sys / socket.h >
#include < linux / sockios.h >
#include < sys / ioctl.h >
#include < arpa / inet.h >
int main( void )
{
int s;
struct ifconf conf;
struct ifreq * ifr;
char buff[BUFSIZ];
int num;
int i;
s = socket(PF_INET, SOCK_DGRAM, 0 );
conf.ifc_len = BUFSIZ;
conf.ifc_buf = buff;
ioctl(s, SIOCGIFCONF, & conf);
num = conf.ifc_len / sizeof ( struct ifreq);
ifr = conf.ifc_req;
for (i = 0 ;i < num;i ++ )
{
struct sockaddr_in * sin = ( struct sockaddr_in * )( & ifr -> ifr_addr);
ioctl(s, SIOCGIFFLAGS, ifr);
if (((ifr -> ifr_flags & IFF_LOOPBACK) == 0 ) && (ifr -> ifr_flags & IFF_UP))
{
printf( " %s (%s)/n " ,
ifr -> ifr_name,
inet_ntoa(sin -> sin_addr));
}
ifr ++ ;
}
return 0;
}
(转贴) Linux下,获得系统IP地址。
最新推荐文章于 2024-04-12 17:10:39 发布