Pipe auslesen ?



  • Hallo Zusammen,
    ich würde gern den Inhalt einer Pipe auslesen können, ohne das dieser aus der Pipe entfernt wird. Also wenn z.B. nichts in der Pipe steht möchte ich auch das ne Ausgabe kommt "Pipe leer" usw. ! Das ganze soll so ne Art Kontrollfunktion werden damit ich immer den Inhalt meiner unnamed Pipes kontrollieren kann.
    Auf dem normalen Weg kann ich ja nur in eine unnamed Pipe schreiben und den Inhalt dann auslesen und entsprechend ausgeben.

    Ich hoffe ihr versteht was ich brauche und könnt mir helfen.

    MfG Johanna.



  • Das kannst du doch über man: select(2) wunderbar kontrollieren

    fd_set set;
    FD_ZERO(&set);
    FD_SET(pipe, &set);
    
    struct timeval val;
    memset(&val, 0, sizeof(val));
    val.tv_usec=1; //kurzes timeout, damit select nicht erst auf Daten wartet.
    
    int retval = select(pipe+1, &set, NULL, NULL, &tv);
    if(retval == -1)
      perror("select");
    else if(retval)
      puts("Pipe enthält Daten");
    else
      puts("Pipe leer");
    


  • Aber damit kann ich die vorhandenen Daten ja nicht ausgeben, oder ? Falls vorhanden sollen die Daten die in der Pipe stehen nämlich ausgegeben werden, ohne das diese entfernt werden.



  • Ne das ist nicht möglich, dann musst du sie schon woanderst speichern.



  • Das Problem ist, es muss irgendwie möglich sein. Das ist unter anderem ein Teil einer Programmier Aufgabe die wir bekommen haben. Man soll das angeblich lösen können in dem man im Kernel rumspielt bzw. der Inhalt der Pipe wird ja irgendwo ausgelagert. Und diesen Speicherplatz gilt es rauszubekommen bzw wie man darauf zugreift.

    Dachte aber es gibt vielleicht schon so eine Funktion und deshalb die Frage. Tja jetzt muss ich mir ma gedanken machen wie man die Sache angeht.



  • Wer giebt solche Programmieraufgaben? (Nur so aus intresse ;-))


Anmelden zum Antworten