环境:web服务器采用的是Lighttpd,移植到嵌入式开发板上。
修改ip方式一:
{
int sock = 0;
struct ifreq ifr;
if((pIPAddr == NULL) || (pIfName == NULL))
{
PRINT_ERR("set ip: pInterface == NULL\r\n");
return -1;
}
memset(&ifr, 0, sizeof(ifr));
strncpy, pIfName, IFNAMSIZ);
sock = socket(AF_INET, SOCK_DGRAM, 0);
if(sock <= 0)
{
PRINT_ERR("set ip: sock error, %s\r\n", strerror(errno));
return -1;
}
struct sockaddr_in sin;
memset(&sin, 0, sizeof(struct sockaddr_in));
= AF_INET;
= inet_addr(pIPAddr);
memcpy(&i, &sin, sizeof(struct sockaddr_in));
if(ioctl(sock, SIOCSIFADDR, &ifr) < 0)
{
PRINT_ERR("set ip(%s) error!\r\n", pIPAddr);
close(sock);
return -1;
}
//设置激活标志
i |= IFF_UP |IFF_RUNNING;
//get the status of the device
if( ioctl( sock, SIOCSIFFLAGS, &ifr ) < 0 )
{
perror("SIOCSIFFLAGS");
close(sock);
return -1;
}
close(sock);
return 0;
}
修改ip方式二:
/*config ip netmask*///
system("/sbin/ifconfig eth0 down");
sprintf(cmd,"/sbin/ifconfig eth0 %s netmask %s",ipAddr,netMask);
system(cmd);
system("ifconfig eth0 up");
分别以以上两种方式对ip进行修改,然后重启Lighttpd web服务器。方式一的情况下,ip修改成功,但是web服务器登录不上去,方式二的方式可以正常运行。
是否这两种方式修改ip,都对系统底层即时生效了?