日期:2014-05-16  浏览次数:20736 次

想要使用ioctl函数设置ip地址,出现点问题求大神帮忙解决下!

 struct   sockaddr_in   sin;
    struct   ifreq   ifr;
    int   fd;
    char *name="eth1",*address="192.168.1.175";
    bzero(&ifr,sizeof(struct ifreq));
    fd=socket(AF_INET,SOCK_DGRAM,0);
    strncpy(ifr.ifr_name,name,IFNAMSIZ);
    ifr.ifr_name[IFNAMSIZ - 1] = 0; 
    memset(&sin,0,sizeof(sin));
    sin.sin_family=AF_INET;
    sin.sin_addr.s_addr=inet_addr(address);
    memcpy(&ifr.ifr_addr,&sin,sizeof(sin));
    if(ioctl(fd,SIOCSIFADDR,&ifr)<0)
    {
        return -1;
    }

代码如上,是我参考网上的文章写的
http://blog.chinaunix.net/uid-11153816-id-3270480.html

不过编译的时候会报错,错误如下:
/usr/include/linux/if.h:137: 错误:redefinition of 'struct ifmap'
/usr/include/net/if.h:112: 错误:previous definition of 'struct ifmap'
/usr/include/linux/if.h:171: 错误:redefinition of 'struct ifreq'
/usr/include/net/if.h:127: 错误:previous definition of 'struct ifreq'
/usr/include/linux/if.h:220: 错误:redefinition of 'struct ifconf'
/usr/include/net/if.h:177: 错误:previous definition of 'struct ifconf'

好象是 memcpy(&ifr.ifr_addr,&sin,sizeof(sin))这句代码有问题,求大神帮忙看看撒

------解决方案--------------------
在RedHat AS4上试了一下楼主代码可以正常编译,应该是你当前代码头文件之间有影响,你可以把你的头文件全部换成你引用的那博客文章里的头文件,是可以正常编译你这些代码的。