想要使用ioctl函数设置ip地址,出现点问题求大神帮忙解决下! structsockaddr_insinstructifreqifrintfdc
想要使用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上试了一下楼主代码可以正常编译,应该是你当前代码头文件之间有影响,你可以把你的头文件全部换成你引用的那博客文章里的头文件,是可以正常编译你这些代码的。