pipe()/fork()/execl() functions do not return output of external program

Hello,
I am writing a program which calls an external program and gets its output. I implemented this functionality into a method. When I called the method for the first time it successfully obtains the output, however, when I called multiple times in the main() it does not obtain the output of the external program after the first call.
Could anyone please help me.
engin

Below is the main structure of the method:
...::ally(){
allyString.clear();//to collect the output of external program
pid_t pid;
int commpipe[2];
int status;

if(pipe(commpipe)==-1){
cout<<"Error in opening pipe"<<endl;
exit(1);
}
pid=fork();
if(pid==-1){
cout<<"Error in forking"<<endl;
exit(1);
}
if(pid>0){//parent process
close(commpipe[1]);
dup2(commpipe[0],0)
;//replace stdin with read side of pipe
wait(&status);//wait for the child to finish
while(!cin.eof()){
char c=cin.get();
allyString.push_back(c);
}
close(commpipe[0]);
}else{//child process
close(commpipe[0]);
dup2(commpipe[1],1);
//replace stdout with write side of pipe
if(execl("/src/local/bin/ally", "ally","154.54.20.26", "154.54.20.26",(char *)0)==-1){//the external program
cout<<"Error in executing the external ally program "<<endl;
exit(1);
}
cout<<"Finished Child process";
close(commpipe[1]);
}
}
Topic archived. No new replies allowed.