Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    C redirect stdin stdout

    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?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    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?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ho risolto da me. Grazie lo stesso

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.