Suche FIFO Klasse



  • Hallo!

    Ich suche eine FIFO-Klasse im Stile der UNIX Pipes. Also mit ungefär so einem Interface:

    class fifo
    {
      int write(char *ptr, int size);
      int read(char *ptr, int size);
    };
    

    deque kenne ich, aber da kann man leider nur Daten konstanter Größe durchjagen.
    Danke im Voraus.



  • Auch wenn's neunmalklug erscheint:

    www.google.de << +"c++" +"fifo" +"STL"
    

    Erster Treffer. Dein Interface kannst du drum herum basteln.

    Grüße...

    Heiko



  • Damit du es statt Copy/Paste wenigstens abschreiben musst, habe ich es mal als Screenshot hochgeladen.

    Ein derart praktisches Syntax-Highlighting, das neben Keywords, verschiedene Typsorten (Klassen, typedefs, ...) und sogar Aufrufe von fremdem und eigenem Code unterscheiden kann, gibt es übrigens nur bei eclipse.



  • The Fan schrieb:

    Ich suche eine FIFO-Klasse im Stile der UNIX Pipes. Also mit ungefär so einem Interface:

    class fifo
    {
      int write(char *ptr, int size);
      int read(char *ptr, int size);
    };
    

    Was ist die Bedeutung des Parameters size bei der Methode read? Ist es die Größe des Speichers, die Du beim Lesen zur Verfügung stellst oder ist es genau die Anzahl der Zeichen, die Du lesen möchtest?

    Gruß
    Werner



  • Hier nochmal mit richtigem Zählen, wie viel gelesen/geschrieben wurde.



  • Tip: int -> size_t.
    Und du solltest dir überlegen ob die "read" Funktion bei size > 1 "spiegeln" soll oder nicht.
    also...
    write "abc", 3
    read buffer, 3 -> "cba" oder "abc"

    EDIT: ich == doof 🙂 Eine FIFO spiegelt ja garnix, ist ja keine LIFO 😃



  • Werner Salomon schrieb:

    Was ist die Bedeutung des Parameters size bei der Methode read? Ist es die Größe des Speichers, die Du beim Lesen zur Verfügung stellst oder ist es genau die Anzahl der Zeichen, die Du lesen möchtest?

    Analog zur UNIX Pipe. Also ist es die Anzahl der Bytes, die ich lesen möchte. Wenn nicht genug Bytes in der FIFO sind, wird dann halt gewartet, bis wieder Daten vorhanden sind.

    Die Idee, Bytes einzeln durch eine queue zu schicken hatte ich natürlich auch schon, aber das ist recht ineffizient bei ca. 200KB/s und außerdem ist die STL leider nicht thread safe.
    Ich hatte gehofft, jemand hat ein FIFO thread safe auf Basis eines einfachen Ringbuffers oder ähnlichem implementiert.



  • Hier ist ein Beispiel, wie man mit codesearch danach suchen kann. Schau dir z. Bsp. mal den zweiten Eintrag an.


Anmelden zum Antworten