Mi spiego meglio, ho trovato in rete questo frammento di codice:
codice:
#include <signal.h>
#include <stdio.h>
int main(void)
{
int p[2],st;
char buf;
signal(SIGINT, SIG_IGN);
pipe(p);
if (fork()==0) {
close(1);
dup(p[1]);
close(p[0]);
close(p[1]);
execl("/bin/ls","ls","-l",0);
perror("execl fallita");
exit(-1);
}
else {
close(0);
dup(p[0]);
close(p[0]);
close(p[1]);
while (read(0,&buf,1)) write(1,&buf,1);
}
wait(&st);
}
Perchè l'output del ramo if viene scritto dentro la pipe anzichè nello stdout? Ho studiato la dup e dice che semplicemete duplica il descrittore, quello nuovo punta nel medesimo posto di quello vecchio. Quindi a cosa serve se nel ramo if chiude tutto i descrittori? chi dice alla execl dove rdirigere l'output?