Von fstream den filedescriptor?!
lima-city → Forum → Programmiersprachen → C/C++ und D
anbetung
antwort
beitrag
bestimmtes konzept
datei
dozent
erz
funktion
gedacht
gnu
group
klare aussage
lsung
main
stack
standard
stegreif
test
uebrigens
unterstrich
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
gar nicht. dein fstream _ist_ dein filedescriptor.
-
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. -
_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 -
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 -
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. -
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage