Lesen mit fgetc von einer Named Pipe



  • Hallo. Hier die Situation.

    Ich habe einen schreib-Prozess, der Text aus einer Textdatei liest und in eine named Pipe speichert.
    Dann habe ich einen Leseprozess, der den Text aus der Named Pipe lesen soll.

    Leseprozess

    int main (int argc, char *argv[])
    {
      // File descriptor
      FILE *r_pipe;
    
      // Pipe öffnen
      if ((r_pipe = fopen (argv[1], "r+")) == (FILE *)NULL)
      {
        printf ("ERR (Lesen): Fehler beim Öffnen der Pipe\n");
        exit (1);
      }  
      printf("Pipe geöffnet\n");
      int ch, i = 0;
      while((ch = fgetc(r_pipe)) != EOF)
      {
        putchar(ch);
        i++;
      }
    
      fclose (r_pipe);  
      printf("Pipe geschlossen\nEs wurden %d Zeichen gelesen", i);
    
      return(0);	   
    }
    

    Der Leseprozess bleibt immer in der Zeile while((ch = fgetc(r_pipe))!=EOF) hängen.

    Hier ist der Schreibprozess:

    int main (int argc, char *argv[])
    {
      // Zeiger auf Datei
      FILE *fp;
      // Datei text.txt mit Lesezugriff öffnen
      if((fp = fopen(argv[2], "r")) == (FILE *)NULL)
      {
        printf("ERR (Schreiben): Fehler beim Öffnen der Datei.\n");
        exit(1);
      }
      printf("Datei geöffnet\n");
    
      // Zeiger auf NAMED PIPE
      FILE *w_pipe;
      // PIPE pipeline mit Schreibzugriff öffnen
      if ((w_pipe = fopen(argv[1], "w+")) == (FILE *)NULL)
      {
        printf ("ERR (Schreiben): Fehler beim Öffnen der Pipe.\n");
        exit (1);
      }
      // Pufferung abschalten
      setvbuf(w_pipe, NULL, _IONBF, 0);
      printf("Pipe geöffnet\n");
    
      int ch, i = 0;
      while((ch = fgetc(fp))!=EOF)
      {
        fputc(ch, w_pipe);
        i++;
      }
      // PIPE schließen
      fclose (w_pipe);
      printf("Pipe geschlossen\nEs wurden %d Zeichen geschrieben.\n", i);
    
      // Datei schließen
      fclose(fp);
      printf("Datei geschlossen\n");
    
      return(0);	   
    }
    

    Hat hjemand eine Idee, wo mein Fehler liegt?

    Vielen Dank


Anmelden zum Antworten