Frage zu Read - Blockierung beim FIFO

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von macke_a, 25.07.2007.

  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. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #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. Anfänger Frage: Welchen Standard wählen

    Anfänger Frage: Welchen Standard wählen: Hallo, früher wußte ich nie wie ich anfangen muß. Heute weiß ich einfach anfangen und mir alles selbst beibringen. Was ich mich aber noch...
  3. Sicherheitsfragen zu PHP-Anwendungen auf der Webseite

    Sicherheitsfragen zu PHP-Anwendungen auf der Webseite: Hallo miteinander, habe eine kleine Webseite (4 Jahre statisch, keine Sicherheitsprobleme bisher) und ich frage mich, wie sicher die Verwendung...
  4. Fragen zu find

    Fragen zu find: Hallo an alle, Ich bin ziemlich neu in der Linux Welt und habe paar frage Ich soll alle Datein im system finden die vor weniger als drei Tagen...
  5. Frage zu QNX - habe login nie gefunden

    Frage zu QNX - habe login nie gefunden: ′