发新话题
打印

请问用ioctl设置了网卡的ip地址和掩码后,如何激活?

请问用ioctl设置了网卡的ip地址和掩码后,如何激活?

我在程序中用ioctl函数设置了网卡的ip地址和掩码,但是设置完成后,网络并没有激活,还是不能收发数据,但是退出程序用ifconfig-a查看,设置已经成功,然后用ifconfig激活,就可以收发数据了,请问,能不能用ioctl在设置完ip地址和掩码后,直接用ioctl激活?或者还有其他的方法在程序中直接激活网络设置?谢谢啊      

TOP

system("ifconfig eth0 192.168.168.1 mask 255.255.255.0");: X. G6 T7 l/ t, h4 m' @, j! N  o
就可以直接激活了。      

TOP

复制内容到剪贴板
代码:
struct ifreq buf[MAXINTERFACES];
struct ifconf ifc;
int fd,intrface;
if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0) {
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t) buf;
intrface = ifc.ifc_len / sizeof (struct ifreq);
printf("interface num is intrface=%d\n\n\n",intrface);
while (intrface-- > 0)
{
if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc)) {
ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]);
if (!buf[intrface].ifr_flags & IFF_UP) {
buf[intrface].ifr_flags |=IFF_UP;
}
ioctl (fd, SIOCSIFFLAGS, (char *) &buf[intrface]);
}
close(fd);
不用多解释了吧?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

版主,你好,我不会用那些ioctl,比如:ioctl (fd, SIOCGIFCONF, (char *) &ifc)和ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]),你能不能解释一下?多谢。      

TOP

ioctl是系统调用,用于对设备的操作,如果你了解一些驱动源码的话,应该明白。具体地说,ioctl是向内核提交一个命令,用于获取或者设置和设备相关的参数。SIOCGIFCONF是获取,SIOCSIFFLAGS是设置,看到区别了吗?& ]/ V4 F; F9 o6 ^( |, E" g, I
ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]);这句是获取设备的当前状态* U! W8 V* h! ^. W1 Z
buf[intrface].ifr_flags |=IFF_UP;设置激活标志' P: c* z  t4 d
ioctl (fd, SIOCSIFFLAGS, (char *) &buf[intrface]);然后设置,很简单吧。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

谢谢版主指导      

TOP

发新话题