- 论坛徽章:
- 0
|
碰到一个很棘手的问题,不知各位以前又没碰到过,一个很简单的管道应用,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;
- }
复制代码 |
|