write, fputs, ... ?



  • Hallo,

    die Frage ist wahrscheinlich ziemlich blöd aber ich kann es mir einfach nicht erklären 🙂

    Ich kann ja ganz noraml eine Datei mit FILE * fopen("filename", "w") zum schreiben öffnen und und dann mit fputs z.b. reinschreiben. Jetzt gibt es aber auch noch die Variante mit diesen Filedeskriptoren, also mit int fd open("filename", O_WRONLY).

    Wieso gibt es hier zwei völlig verschiedene und komplett andere Herangehensweisen? Ich möchte ein Programm schreiben, bei welchem ich auch in der Datei den Filepointer hin und herspringen lassen muss. nun gibt es hierfür ja für jeden Ansatz eine seek-methode.

    Warum gibt es diese beiden Herangehensweisen um Datein zu Öffnen/Schließen/Bearbeiten... Würde nicht bspw. open() reichen?

    Gruß Jessy



  • fopen() ist Standard C und open() nicht. open() ist POSIX...



  • Was heißt fopen ist standard-C? Ich kann doch die entsprechenden Header-Dateien genau so einbinden.



  • Das heißt, dass fopen() auf jedem System das C implementiert garantiert verfügbar ist. open() dagegen ist nicht Teil der Standardbibliothek, d.h. dein Code funktioniert damit natürlich nur auf Systemen, wo es ein entsprechendes open() gibt...



  • Nun sind SEEK_SET usw. sowohl in stdio.h als auch in unistd.h. Kann es dadurch nicht zu problemen kommen? Also wenn ich beide Header include.



  • Die Headerdateien sind nicht die Bibliothek.
    Da stehen die Funktions- und Variablendeklarationen sowie die Makrodefinitionen drin.



  • Dann werden die Makros aber trotzdem zwei Mal definiert.

    Was ist denn dann die Bibliothek? die zu den headerdateien gehörigen c-dateien?



  • Jein.
    Die C Dateien werden zu Objectdateien (.o oder .obj) compiliert.

    Diese Objectdateien werden dann zusammen mit den Bibliotheken vom Linker zum ausführbaren Programm (z.B. .exe) gebunden.

    Oder man macht aus den Objectdateien eine neue Bibliothek.

    Jedenfalls ist die Bibliothek schon compiliert.

    Problematisch wird das mit den Makros nur, wenn sie anders definiert werden.

    Die Funktionen der Standardlibrary müssen ihre Daten auch irgendwie loswerden.
    Dazu werden sie auch die Systemcalls nutzen. Und dazu gehört auch open() .



  • Jessyyy schrieb:

    Dann werden die Makros aber trotzdem zwei Mal definiert.

    Nein. POSIX setzt auf ISO C (dem C Standard) auf. Die werden also schon darauf Rücksicht genommen haben, dass es nicht zweimal definiert wird.



  • rüdiger schrieb:

    Nein. POSIX setzt auf ISO C (dem C Standard) auf. Die werden also schon darauf Rücksicht genommen haben, dass es nicht zweimal definiert wird.

    dot schrieb:

    fopen() ist Standard C und open() nicht. open() ist POSIX...

    Die Aussagen widersprechen sich doch oder?
    Also nach lauter lesen usw. ist mir immer noch nicht richtig klar: Was ist denn nun POSIX und was ist Standard C? Kann mir das jemand erklären? 😞 Das wäre echt toll.

    Danke für eure Mühe 🙂



  • Standard C ist C so wie es der ISO C Standard beschreibt.
    POSIX ist ein völlig eigener Standard der mehr oder weniger die API von UNIX beschreibt. Du kannst es dir vorstellen wie eine Bibliothek die eben auf Systemen die es unterstützen verfügbar ist.


Anmelden zum Antworten