当前位置: 技术问答>linux和unix
调用system函数执行更改MAC地址异常退出,上面的设置命令直接在shell终端中或在单独的shell脚本中能正常执行
来源: 互联网 发布时间:2017-03-06
本文导语: int setmacaddr(unsigned char ipbyte) { char macaddr[50]; char ipaddr[30]; int retflag = 0; memset(macaddr,0,50); memset(ipaddr,0,30); sprintf(macaddr,"/sbin/ifconfig eth0 hw ether 40:55:52:4d:43:%02x",g_NodeID + 100); ...
int setmacaddr(unsigned char ipbyte)
{
char macaddr[50];
char ipaddr[30];
int retflag = 0;
memset(macaddr,0,50);
memset(ipaddr,0,30);
sprintf(macaddr,"/sbin/ifconfig eth0 hw ether 40:55:52:4d:43:%02x",g_NodeID + 100);
sprintf(ipaddr,"/sbin/ifconfig eth0 192.168.0.%d netmask 255.255.255.0",g_NodeID + 100);
if(system("/sbin/ifconfig eth0 down") != -1)
{
printf("1;");
if(system(macaddr) != -1)
{
printf("2;");
}
else
{
printf("3;");
lprintf(log,FATAL,macaddr);
retflag = 1;
}
if(system("ifconfig eth0 up") != -1)
{
printf("4;");
}
else
{
printf("5;");
lprintf(log,FATAL,"ifconfig eth0 up fail!rn");
retflag = 3;
}
}
else
{
printf("6;");
lprintf(log,FATAL,"ifconfig eth0 down fail!rn");
retflag = 4;
}
调用system函数执行更改MAC地址异常退出,上面的设置命令直接在shell终端中或在单独的shell脚本中能正常执行
当调用上述函数时,系统先通过printf("1;");打印出 1;然后系统自己打印出eth0: link down
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1,然后程序执行就退出了,没有进入我准备的失败判断分支,也没有进入我准备的执行正常分支,不知道从哪个分支退出的?
谁指出根本原因?
{
char macaddr[50];
char ipaddr[30];
int retflag = 0;
memset(macaddr,0,50);
memset(ipaddr,0,30);
sprintf(macaddr,"/sbin/ifconfig eth0 hw ether 40:55:52:4d:43:%02x",g_NodeID + 100);
sprintf(ipaddr,"/sbin/ifconfig eth0 192.168.0.%d netmask 255.255.255.0",g_NodeID + 100);
if(system("/sbin/ifconfig eth0 down") != -1)
{
printf("1;");
if(system(macaddr) != -1)
{
printf("2;");
}
else
{
printf("3;");
lprintf(log,FATAL,macaddr);
retflag = 1;
}
if(system("ifconfig eth0 up") != -1)
{
printf("4;");
}
else
{
printf("5;");
lprintf(log,FATAL,"ifconfig eth0 up fail!rn");
retflag = 3;
}
}
else
{
printf("6;");
lprintf(log,FATAL,"ifconfig eth0 down fail!rn");
retflag = 4;
}
调用system函数执行更改MAC地址异常退出,上面的设置命令直接在shell终端中或在单独的shell脚本中能正常执行
当调用上述函数时,系统先通过printf("1;");打印出 1;然后系统自己打印出eth0: link down
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1,然后程序执行就退出了,没有进入我准备的失败判断分支,也没有进入我准备的执行正常分支,不知道从哪个分支退出的?
谁指出根本原因?
|
为何不判断返回值 == 0 ?
if(system("/sbin/ifconfig eth0 down") == 0)
if(system("/sbin/ifconfig eth0 down") == 0)
|
为什么不直接该配置文件/etc/sysconfig/network-script/ifcfg-eth0
然后执行/etc/init.d/network restart
system在执行的时候,确保命令正确,没有必要检查返回值吧?直接一堆system执行下来就可以了。
然后执行/etc/init.d/network restart
system在执行的时候,确保命令正确,没有必要检查返回值吧?直接一堆system执行下来就可以了。