我在线程中执行system(),甚至system(“ls -al”);都会造成Input/Output error错误。
而在debug方式下,main直接调用system()则没有问题。
该线程优先级比较低,只有8会有问题吗?
momentics 6.3.2
谢谢!
我在线程中执行system(),甚至system(“ls -al”);都会造成Input/Output error错误。
而在debug方式下,main直接调用system()则没有问题。
该线程优先级比较低,只有8会有问题吗?
momentics 6.3.2
谢谢!
应该跟优先级没有问题。你能够贴一个再现程序出来吗?
谢谢xtang
是不是不能在多线程程序的线程中调用?
原来想在有新的设备申请到IP后,清除原设备的ARP信息。因为设备不能发出ARPRequest,现在总是要等很长时间设备才能ping通。
手动在shell中删除
#arp -d 192.168.1.31
可行
void ReleaseMacAddr(char *Packname)
{
char cmdbuf[256];
int rc;
if (system(NULL)==0) {
printf("Can't use system command");
return;
}
//// sprintf(cmdbuf,"/bin/arp -d %s",Packname);
//// rc=system(cmdbuf);
//// if (rc==-1) printf("Shell arp -d could not be run");
sprintf(cmdbuf,"/bin/sh -c \"/bin/route -q delete %s &\"",Packname);
//// rc=system(cmdbuf);
rc=system("ls");
//// sprintf(cmdbuf,"/bin/route -q delete %s &",Packname);
//// rc=spawnl(P_NOWAIT,"/bin/sh","-c",cmdbuf,NULL);
if (rc==-1) {
printf("Shell route delete errno=%d(%s)",errno,strerror(errno));
}
else {
printf("Shell route delete return=%d",rc);
}
}
system(NULL)可以执行,其他的system命令都是同样错误
spawnl()也是同样错误
另:有没有其他办法清除arp信息?尝试过ioctl(sock,SIOCDARP,&arpreq)结果却提示没有该设备,连SIOCGARP也不成功
#include <net/if_arp.h>
void ReleaseMacAddr(char *Packname)
{
struct sockaddr_in *sin;
int sock;
struct arpreq arpreq;
sock=socket(AF_INET,SOCK_DGRAM,0);
if (sock!=-1) {
memset(&arpreq,0,sizeof(arpreq));
sin=(sockaddr_in *)&arpreq.arp_pa;
sin->sin_family=AF_INET;
sin->sin_addr.s_addr=htonl(inet_addr("192.168.1.31"));
if (ioctl(sock,SIOCDARP,&arpreq)<0) {
printf("Delete arp error");
}
close(sock);
}
}
谢谢!
应改跟多线程无关。spawn()也出错的话,可能你连接的某个fd无效了。
arp的源码在这里,抄抄改改就行了。
谢谢xtang