PDA

Visualizza la versione completa : C redirect stdin stdout


lio.b
12-10-2009, 10:35
Buongiorno,
ormai da giorni studio documentazione online per capire come fare il redirect con le pipe usando la dup ma non riesco a capire il funzionamento. Supposto che un processo padre voglia eseguire una execv("ls","ls",0), come faccio a ridirezionare lo stdout sulla pipe anzichè sullo schermo? non riesco proprio a capire che c'entra la dup dato che copia solo i descrittori. Potete aiutarmi?

lio.b
12-10-2009, 15:36
Mi spiego meglio, ho trovato in rete questo frammento di 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?

lio.b
12-10-2009, 19:56
Ho risolto da me. Grazie lo stesso

Loading