Allora deve funzionare coma la shell di linux. Se io eseguo questo comando:
ls -l | grep [a-c]*.c
L'output di ls -l deve andare in input a grep che poi produrra il suo output. Quindi ogni comando deve ricevere l'input dal precedente e inviare l'output al successivo. Come compilatore io uso gcc. Adesso posto un pezzo del codice.
codice:
#include "functions.h"
void pipecmds(char **commands, int cmds){
FILE *fpipe[cmds];
int fd;
int i,status;
pid_t pid;
if((pid=fork()) < 0){
perror("fork error");
exit(FORK_ERR);
}
if(pid == 0){
for(i=0; i<cmds; --i){
fpipe[i]=popen(commands[i],"w");
dup2(fileno(fpipe[i]), STDOUT_FILENO);
}
for(i=cmds; i>0; --i)
pclose(fpipe[i]);
}
if(pid > 0){
if (waitpid(pid,&status,0) == -1){
if(errno!=EINTR){
perror("waitpid error");
exit(WAIT_ERR);
}
else{
kill(pid,SIGTERM);
do{
if (waitpid(pid,&status,0) != -1)
break;
}while(errno==EINTR);
}
}
}
return;
}