Frage zu Read - Blockierung beim FIFO

Diskutiere Frage zu Read - Blockierung beim FIFO im Programmieren allgemein Forum im Bereich Programmieren unter Linux/Unix; Hallo ! Folgenden Text habe ich über Pipes gefunden. Dabei geht es mir darum, was read macht, wenn keine Daten mehr im Fifo sind. read: Die...

  1. #1 macke_a, 25.07.2007
    macke_a

    macke_a Mitglied

    Dabei seit:
    12.01.2007
    Beiträge:
    28
    Zustimmungen:
    0
    Hallo ! Folgenden Text habe ich über Pipes gefunden. Dabei geht es mir darum, was read macht, wenn keine Daten mehr im Fifo sind.

    read: Die Daten werden in der Reihenfolge gelesen, wie sie geschrieben wurden (FIFO-Prinzip). Sie können nicht zurückgegeben und auch nicht nocheinmal gelesen werden. Wenn die Pipe leer ist, blockiert read normalerweise solange bis neue Daten in der Pipe vorliegen. Falls die Pipe auf der Schreibseite geschlossen wurde, liefert read stattdessen das Resulat 0. Das die Anzahl der zu lesenden Bytes angebende Argument von read wird nicht immer befriedigt, nur wenn genügend Daten vorliegen. Sonst werden gerade so viel Bytes gelesen, wie in der Pipe zur Verfügung stehen.

    Was bedeutet das für meinen aktuellen Prozess? Blockierung?
    Bleibt man Prozess dann stehen?

    Nun, da ich n. der Linux Freak bin, wäre es nett wenn mir jemand von Euch dieses mal näher erläutern könnte !

    Danke!

    Mfg macke_a
     
  2. #2 x0r, 23.08.2007
    Zuletzt bearbeitet: 23.08.2007
    x0r

    x0r Bitschubser

    Dabei seit:
    20.12.2005
    Beiträge:
    169
    Zustimmungen:
    0
    Ort:
    Berlin
    Mahltid,

    Angenommen, wir haben uns eine entsprechende Gerätedatei: 'InterProc.fifo' erstellt, und wollen nun zwei Prozesse darauf zugreifen lassen. Hier mal der schreibende...

    Code:
    
    #include <signal.h>
         .
         .
    
    void fMyCustomSigHndl(int);
    
    void fMyCustomSigHndl(int hFIFO_toClose) 
    { 
       perror("write");
       close(hFIFO_toClose);
       exit(SIGPIPE);
    }
    
    int main(int argc, char** argv) 
    {
      int hMyFIFOBuffer;                    
      int iWrittenBytes;
      char *szPipedText = "Ich bin ein gepipter Text\n";
    
    
      hMyFIFOBuffer = open("InterProc.fifo",2);                  
      
      if (hMyFIFOBuffer < 0)
      {
            perror("open");
            exit(1);
      }
    
      iWrittenBytes = write(hMyFIFOBuffer, text, strlen(text));
      if (iWrittenBytes != strlen(text)) /* ist wohl nicht alles empfangen worden ? */
      {
         signal(SIGPIPE,fMyCustomSigHndl(hMyFIFOBuffer));  /* ruft die Funktion: 'fMyCustomSigHndl()' auf, wenn für diesen Prozess kein beschreibbares PIPE-Ende mehr vorhanden ist... */
      }
      close(hMyFIFOBuffer);
      return 0;
    }
    
    
    Also, nochmal:

    Der schreibende Prozess löst das Signal: SIGPIPE aus, auf das Du irgendwie abfangen musst um darauf reagieren zu können. Im Zweifelsfall, ist der schreibende Prozess durch schließen des entspr. Handles zu beenden, oder wie im Beispiel zu sehen, es wird eine Funktion aufgerufen, in der dann wiederum alternative Aktionen ausgeführt werden können (hier auch nur Handle zurückgesetzt, und schreibenden Prozess beendet!).
    Für den anderen Fall, d.h. Du willst aus einer PIPE lesen, und der schreibende Prozess stopt die Übertragung, so wird 'read()' solange ausgeführt, bis entweder wieder Daten über die PIPE strömen, bzw. bis der schreibende eben wieder SIGPIPE signalisiert...

    Hoffe das hat geholfen...

    ...MfG
     
Thema:

Frage zu Read - Blockierung beim FIFO

Die Seite wird geladen...

Frage zu Read - Blockierung beim FIFO - Ähnliche Themen

  1. openLDAP Frage: userPassword read nur für bestimmten User

    openLDAP Frage: userPassword read nur für bestimmten User: Hi, ich würde mich gerne mit einer Frage an euch wenden. OS: CentOS 5.10 OpenLDAP: 2.3.43 per ldapsearch -LLL -x -b "dc=domain,dc=de"...
  2. Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?)

    Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?): Hallo Leute :) Ich habe heute eine E-Mail bekommen und zwar für ein Telefoninterview am übermorgen und ich bin da recht nervös, vor allem am...
  3. 2 Gateways - ein Netz. Verständnisfrage

    2 Gateways - ein Netz. Verständnisfrage: Hallo Gemeinschaft, ich habe 2 Gateways zu einem Netz. Mit dem ersten kommen VPN Verbindungen Net2Net mittels FritzBox herein. Ich meine es ist...
  4. Fragen zu stty, quotes und Datein (flush)

    Fragen zu stty, quotes und Datein (flush): Hi, ich schreibe seit ein paar Tagen ein Skript, dass über die Serielle Schnittstelle kommuniziert. Leider gibt es noch zwei Probleme, die ich...
  5. Verständnisfrage zu RegExps

    Verständnisfrage zu RegExps: Hallo Leute, ich bastle gerade an einem Shell-Script und brauche dabei ein paar RegExps. Bisher hatte ich mich mit RegExps wenig auseinander...