关于execvp函数的疑问,奇怪啊......高手请进
碰到一个很棘手的问题,不知各位以前又没碰到过,一个很简单的管道应用,myexec函数中execvp函数执行route以及ifconfig命令时情况良好,但是一执行iptables -L这个命令时就出现错误提示说Bad address,不知道什么原因,请高手帮忙. 代码如下:
void myexec(char buf[],char *cmdname,char **argv)
{
int n;
int fd[2];
int pid,status;
if( pipe(fd)<0 )
err_sys("myexec: open pipe fd1 error");
if( (pid=fork())<0 )
err_sys("myexec: fork error");
else if(pid==0)
{
close(fd[0]);
if(dup2(fd[1],STDOUT_FILENO)!=STDOUT_FILENO)
err_sys("myexec: dup fd[1] to stdout error in child process");
if( execvp(cmdname,argv)<0 )
{
//err_sys("myexec: execvp error in child process");
perror("myexec: execvp error in child process");
exit(1);
}
}
close(fd[1]);
if( (n=read(fd[0],buf,BUFSIZE))<0 )
err_sys("myexec: read from fd[0] error");
waitpid(pid,&status,0);
close(fd[0]);
}
void get_rules(char buf[])
{
char *cmdname="iptables";
char *argv[2];
int i;
for(i=0;i<2;i++)
argv[i]=NULL;
argv[0]=cmdname;
argv[1]="-L";
myexec(buf,cmdname,argv);
}
int main()
{
char buf[MAXLINE];
buf[0]='\0';
get_rules(buf);
printf("%s\n",buf);
/*get_route(buf);
printf("%s\n",buf);*/
return 0;
}