stdin - stdout über zwei kindprozesse



  • Hi,

    ich erzeuge in meinem programm 2 kindprozesse. im ersten kindprozess starte ich ein programm welches ich als argument übergebe. die ausgabe leite ich zuvor um und lese sie im zweiten kindprozess ein. das funktioniert soweit. mein problem ist dass ich jetzt im zweiten kindprozess wiederrum execv aufrufen will und die zuvor eingelesen daten übegeben will.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>     
    #include <sys/types.h>
    
    int main(int argc, char **argv)
    {
    
      int pi[2];
      pid_t pid;
    
      if(pipe(pi) < 0)
      {
          perror("couldn't create the pipe\n");
          return EXIT_FAILURE;
      }
    
      pid = fork();
      if(pid == 0)
      {
        close(pi[0]);
        dup2(pi[1],STDOUT_FILENO);
        execv(argv[1],NULL);
      }
    
      pid = fork();
      if(pid == 0)
      {
    
        close(pi[1]);
    
        FILE *f_ptr;
        char *string;
        dup2(pi[0],STDIN_FILENO);
    
        f_ptr = fdopen(pi[0],"r");
    
        read(pi[0],string,4000);
    
        //execv("/bin/sort", string);
    
      }
    
      if (waitpid (pid, NULL, 0) != pid) 
      {
        perror ("waitpid()");
        return EXIT_FAILURE;
      }
    
    }
    

    aufruf z.b. ./test /bin/ps

    wie kann ich jetzt aber die eingelesenen daten an z.b. sort übergeben?

    lg



  • execv möchte einen sinnvollen zweiten Parameter... steht so auch in der man page.

    Dann hört zB sort erst auf zu lesen, wenn es ein EOF bekommt. Das bekommt es aber nicht, da die Pipe immer noch offen ist (im Hauptprozess).
    Du wartest auch nur auf einen Prozess.


Anmelden zum Antworten