说明:使用该封装的函数,必须保证/etc/hosts下有主机名和IP的对应关系,否则会失败。
封装
#include <unistd.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
int get_localhost_ip(char *buff)
{
char hostname[32];
struct hostent *hptr;
char buff_tmp[32];
const char *ptr;
if(buff==0)
{
printf("buff==0\n");
return -1;
}
buff[0]=0;
if(gethostname(hostname,sizeof(hostname)) == -1)
{
perror("gethostname");
return -1;
}
if((hptr = gethostbyname(hostname)) == NULL)
{
perror("gethostbyname");
return -1;
}
ptr=inet_ntop(hptr->h_addrtype, hptr->h_addr, buff_tmp, sizeof(buff_tmp));
if(ptr==NULL)
{
perror("inet_ntop");
return -1;
}
strcpy(buff,buff_tmp);
return 1;
}
使用
void main()
{
char ip[32];
if(get_localhost_ip(ip) < 0)
{
printf("get_localhost_ip failed\n");
return;
}
printf("ip = %s\n",ip);
}