#include < stdio.h >
#include < signal.h >
#define R (0)
#define W (1)
int popen2(char *command,int *fd_r, int *fd_w)
{
int pipe_c2p[2],pipe_p2c[2];
int pid;
if(pipe(pipe_c2p)<0){
perror("popen2");
return(-1);
}
if(pipe(pipe_p2c)<0){
perror("popen2");
close(pipe_c2p[R]);
close(pipe_c2p[W]);
return(-1);
}
if((pid=fork())<0){
perror("popen2");
close(pipe_c2p[R]);
close(pipe_c2p[W]);
close(pipe_p2c[R]);
close(pipe_p2c[W]);
return(-1);
}
if(pid==0){
close(pipe_p2c[W]);
close(pipe_c2p[R]);
dup2(pipe_p2c[R],0);
dup2(pipe_c2p[W],1);
close(pipe_p2c[R]);
close(pipe_c2p[W]);
if(execlp("sh","sh","-c",command,NULL)<0){
perror("popen2");
close(pipe_p2c[R]);
close(pipe_c2p[W]);
exit(1);
}
}
close(pipe_p2c[R]);
close(pipe_c2p[W]);
*fd_w=pipe_p2c[W];
*fd_r=pipe_c2p[W];
return(pid);
}