Domanda

Dopo aver incorporato la risposta di Ben Voigt nel codice, sembra funzionare

domanda iniziale:

Sto cercando di utilizzare dup2 a:

  1. passare l'output di "ls -al" come input per "foo grep",
  2. la cui uscita diventa input per "grep bar",
  3. che infine emette stdout.

Il risultato finale è (in bianco), il file "in" è (in bianco) e il file "out" ha l'output di "ls -al".

Tutte le idee che potrebbe accadere?

int main()
{
    pid_t pid;
    int i;
    int inFileDes,outFileDes;   
    inFileDes=open("in",O_RDWR | O_CREAT,S_IRUSR | S_IWUSR); 
    outFileDes=open("out",O_RDWR | O_CREAT,S_IRUSR | S_IWUSR);  
    for(i=0;i<3;i++)
    {   
        if((pid=fork())==0)
        {
            switch(i)
            {
                case 0:
                dup2(outFileDes,1);
                execl("/bin/ls","ls","-al",0);
                break;
                case 1:
                                                  // originally:
                dup2(outFileDes,0);   // dup2(outFileDes,1);  
                dup2(inFileDes,1);    // dup2(inFileDes,0);

                execl("/bin/grep","grep","foo",0);   //lines having foo
                break;
                case 2:
                dup2(inFileDes,0);
                execl("/bin/grep","grep","bar",0);  //lines having foo & bar
                break;
            }
            exit(-1);  //in error   
        }
        waitpid(pid,NULL,0);
    }
    close(inFileDes);
    close(outFileDes);
    return(0);
}
È stato utile?

Soluzione

La chiamata open crea un file vuoto "in" e nessuno dei programmi di scrivere ad essa, in modo che ci si aspetta. Dal momento che entrambe le istanze di grep letti da un file vuoto, la loro produzione è anche vuoto.

Che cosa si vuole veramente è quello di utilizzare la funzione pipe per ottenere un paio di maniglie, che è scritto per essere un programma e letti dal dal successivo. Avrete bisogno di chiamarla due volte perché si hanno due set di connessioni tra i processi figli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top