kostenloser Webspace werbefrei: lima-city


Von fstream den filedescriptor?!

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    k******s

    Hi, ich Programmiere sehr viel C++ auf Linux/Unix Systemen und nutze normalerweise immer die POSIX Funktionen um meine Dateiarbeit abzuwickeln.
    Da aber C++ die fstreams bietet wollt ich das jetzt mal mit nem fstream machen.
    Das Funktioniert soweit auch ganz gut aber ich muss irgendwie an den Filedescriptor herankommen.
    Kann einer von euch mir bei dem Problem helfen.

    Also wie bekomme ich aus nem fstream den filedescriptor heraus?

    Beitrag ge?ndert am 1.03.2006 18:33 von knuckl3s
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c******a

    gar nicht. dein fstream _ist_ dein filedescriptor.
  4. Autor dieses Themas

    k******s

    Hmm, bist du dir da sicher. Kann ich denn dann etwa den POSIX stat() Aufruf mit nem fstream als Parameter starten? Und ich bin mir sicher das man aus einem fstream den fd herausbekommt (mein dozent hat sowas mal erz?hlt).
  5. 0******a

    Was h?ltst du von fstream::fd()?
    Und falls du dann doch lieber mit den ANSI- statt den POSIX-Funktionen arbeiten willst: fdopen(fstream::fd()) hilft dann auch weiter.

    Zu cpttangas Beitrag sag ich mal nichts weiter.
  6. c******a

    _fdopen() ;)

    uebrigens finde ich das ist doch eine recht klare aussage:
    http://groups.google.de/group/gnu.gcc.help/browse_frm/thread/fc06409563567642/c62cabf354ecc27b

    evtl. mal nach libg++ suchen.

    afaik gibts da keine _standardmaessige_ loesung fuer.
    frueher war es moeglich ueber basic_streambuf den filedeskriptor zu bekommen -aber da es (afaik!) nun nicht mehr im standard ist werden die sich dabei schon was gedacht haben.

    aber wozu auch mischen. c / c++ misch masch fuehrt ohnehin nur zu problemen (0-checka -was auch du wissen muesstest) sodass man es entweder einheitlich mit c++ funktionen / klassen oder mit c funktionen programmiert.


    Beitrag ge?ndert am 3.03.2006 00:33 von cpttanga
  7. 0******a

    cpttanga schrieb:
    _fdopen() ;)

    Bei MS ja, aber eigentlich ohne Unterstrich am Beginn. Und selbst bei MS m?sstest du fdopen() auch als fdopen und _fdopen ansprechen k?nnen. Vielleicht mags mal jemand ausprobieren.


    cpttanga schrieb:
    uebrigens finde ich das ist doch eine recht klare aussage:
    http://groups.google.de/group/gnu.gcc.help/browse_frm/thread/fc06409563567642/c62cabf354ecc27b

    Nur geht es da um den umgekehrten Fall wie hier.


    cpttanga schrieb:
    afaik gibts da keine _standardmaessige_ loesung fuer.
    frueher war es moeglich ueber basic_streambuf den filedeskriptor zu bekommen -aber da es (afaik!) nun nicht mehr im standard ist werden die sich dabei schon was gedacht haben.

    Die von mir vorgeschlagene L?sung funktioniert meines Wissens nach aber trotzdem mit allen Compilern. Dass bei der STL iostream im Funktionsumfang so extrem reduziert worden ist, kann ich mir nur mit blinder OO-Anbetung erkl?ren. Da wurden mal wieder M?glichkeiten beschnitten, nur um ein bestimmtes Konzept durchzusetzen.


    cpttanga schrieb:
    aber wozu auch mischen. c / c++ misch masch fuehrt ohnehin nur zu problemen (0-checka -was auch du wissen muesstest) sodass man es entweder einheitlich mit c++ funktionen / klassen oder mit c funktionen programmiert.

    C++ ist keine reine OO-Sprache und du musst sie halt immer mischen. Dir bleibt gar nichts anderes ?brig, denn zeig mir mal die Klasse, die int main() als Memberfunktion hat. ;-)
    Im ?brigen macht das Mischen von C und C++ nur Probleme, wenn man direkt den Stack manipuliert, aber die verschiedenen Aufrufkonventionen von C- und C++-Funktionen nicht beachtet. Ansonsten w?rde mir jetzt aus dem Stegreif nichts Problematisches dazu einfallen.

    Beitrag ge?ndert am 3.03.2006 11:35 von 0-checka
  8. Autor dieses Themas

    k******s

    Danke f?r die Antwort. Hatte schon fast aufgegeben hier eine Antwort zu dem Problem zu finden.
    Aber folgender Code:

    #include <iostream>
    #include <fstream>

    int main()
    {
    std::fstream datei("./blubb");
    std::cout << datei.fd();

    return 0;
    }

    endet beim Kompilieren mit:

    ./test.cpp: In function 'int main()':
    ./test.cpp:7: error: 'struct std::fstream' has no member named 'fd'

    Scheint also doch irgendwie nicht die richtige L?sung zu sein. Ich bitte um weitere Tipps.
  9. 0******a

    Mit welchem Compiler arbeitest du denn?
    Ich habs mal mit gcc probiert. Du hast Recht, die Member-Funktion fd() gibt es da nicht. Die heisst dort stattdessen filedesc(). Ausserdem muss man bei meiner Version von gcc auch noch ein define machen. Aber schau einfach selber mal in die Header.
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!