请教Input/Output error错误问题

我在线程中执行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的源码在这里,抄抄改改就行了。:slight_smile:

http://community.qnx.com/integration/viewcvs/viewcvs.cgi/trunk/utils/a/arp/?root=core_networking&system=exsy1001

谢谢xtang