读书人

linux 停获取本地ip地址后 怎样保存

发布时间: 2013-07-11 15:38:46 作者: rapoo

linux 下获取本地ip地址后 怎样保存 ?
先把结果摆上来:
administrator@ubuntu:~/桌面$ gcc -o ip ip.c
administrator@ubuntu:~/桌面$ ./ip
192.168.1.118
192.168.1.118

代码 如下:

char * ip_addr[8];
int getip();

int main()
{
int i;
int len = getip();

for (i=0; i<len; i++)
{
printf("%s\n",ip_addr[i]);
}

return 0;
}


int getip()
{
int num=0;
int i=0;
int sockfd;
struct ifconf ifconf;
unsigned char buf[512];
struct ifreq *ifreq;
ifconf.ifc_len = 512;
ifconf.ifc_buf = buf;
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0)
{
perror("socket");
//exit(1);
}
ioctl(sockfd, SIOCGIFCONF, &ifconf);

ifreq = (struct ifreq*)buf;

for(i=(ifconf.ifc_len/sizeof(struct ifreq)); i>0; i--)
{
//printf("name = [%s]\n", ifreq->ifr_name);
//printf("local addr = [%s]\n",inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr));
ip_addr[num++] = net_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr);
ifreq++;
}
return num;
}

在代码中printf出来是:
127.0.0.1
192.168.1.118

请问这是什么问题 ? Linux socket 获取本地ip 保存ip


[解决办法]
char* ip_addr[8]这样相当于没有为char*分配空间,应改为char ip_addr[8][32],另外字符串不能直接赋值,而应该用strcpy进行复制。
[解决办法]
电脑中lo打开了,所以num是2,但是ip_addr只保存了最后一个ip 192.168.1.118

读书人网 >C++

热点推荐