io.h/Windows/Unix kompatibilitaet
-
Hallo,
ich bin gerade geschaeftlich unterwegs und wollte mir auf meinem Notebook
ein kleines Tool zur Datensicherung schreiben.
(Aehnlich tar aber mit besonderen Anforderungen, die tar nicht beherrscht)Nun habe ich auf meinem Notebook MS Visual C++, wollte aber das ganze gemaess Ansi-C schreiben, um den Code nachher auch auf Unix kompilieren zu koennen.
So nutzte ich den gcc fuer Windows.Nun stiess ich auf ein Problem beim auflisten von Dateien und Verzeichnissen
(Funktion wie ls oder dir)MS schreibt, dass io.h und die darin enthaltenen Funktionen _findfirst und _findnext meine Wuensche erfuellen sollen.
Auf Windows klappts auch hervorragend.
Nur als ich am Wochenende unter FreeBSD kompilieren wollte, teilte gcc mir mit, dass es kein io.h gibt.
Ein rekursives grep ueber alle include Dateien nach _findfirst brachte kein
Ergebnis.Die Befragung der man-pages ergab: Nutze open_dir() (oder wars opendir()?)
Nun ist das jetzt aber nicht das, was ich will.
Ich dachte, Ansi-C ist gleich und bis auf ein paar Praeprozessoranweisungen
laesst mein Code sich gleichermassen unter Windows als auch unter Unix kompilieren?
-
Also findfirst() und findnext() kenne ich nur aus der Windowswelt. Mit opendir(), ... hab ich schon auf Windows und auf Linux gearbeitet. Die Headerdatei heißt übrigens dirent.h. Die Funktionsweise ist ähnlich wie beim Lesen von Dateien:
opendir() //öffnet Verzeichnis (Datei: fopen())
readdir() //liest nächste Datei bzw. nächstes Verzeichnis im geöffneten Verzeichnis (Datei: fgets())
closedir() //schließt Verzeichnis (Datei: fclose())Allerdings weiß ich nicht, ob opendir() usw. ANSI-C-Standard ist. findfirst() und findnext() sind es, soviel ich weiß, nicht (sonst müsste es ja auch funktionieren).
-
ANSI-C ist auch gleich, nur gibt es weder die io.h noch _findfirst in ANSI-C. Und um gleich alle Karten auf den Tisch zu legen: Es gibt keine Möglichkeit, in reinem ANSI-C Verzeichnisse aufzulisten. Du wirst wohl oder übel zwei verschiedene Codes schreiben müssen, zwischen denen du dann mit Präprozessoranweisungen umschaltest.
-
Wenn AJ richtig versteht kann man mit
opendir() //öffnet Verzeichnis (Datei: fopen())
readdir() //liest nächste Datei bzw. nächstes Verzeichnis im geöffneten Verzeichnis (Datei: fgets())
closedir() //schließt Verzeichnis (Datei: fclose())sowohl unter Windows als auch unter UNIX / gcc arbeiten, wie es aber mit einem dritten OS das keinen gcc hat aussieht weis ich nicht.
-
Danke, das schau ich mir mal an.
Interessant, dass diese Funktionen im MSDN nicht beschrieben sind.
-
Hallo,
stoerti schrieb:
Interessant, dass diese Funktionen im MSDN nicht beschrieben sind.
diese Funktionen (opendir, readdir, closedir) sind auch nicht Bestandteil von Entwicklungsumgebungen, in denen der Visual C-Compiler eingebunden ist.
MfG