首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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

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

热点排行