includes



  • Unter Windows ist die Schnittstelle zum Betriebssystem die Winapi, diese ist nicht irgendwie sprachabhängig, du musst die Funktionen nur der geforderten Aufrufkonvention entsprechend aufrufen und die gewünschten Parameter übergeben, diese haben vorgeschriebene Größen.
    Möchtest du die Winapi zB. mit C verwenden, so kannst du dir bei Microsoft das "Platform SDK" herunterladen, welches Funktionsprototypen für sämtliche winapi-funktionen enthält und typedefs für die erforderlichen typen. Windows lädt beim starten von Anwendungen einige dlls mit, diese werden in der Registry angegeben, welche die winapi funktionen enthalten. Dein Compiler linkt diese statisch zu deinem Programm hinzu, wodurch du einfach die Funktionen ihrem Namen entsprechend aufrufen kannst ohne sie vorher aus der dll laden zu müssen (das geschieht beim statischen linken im hintergrund).

    Das System wie Windows aufgebaut ist, ist etwas komplexer, jedenfalls ist die Winapi in C geschrieben und verwendet intern eine Schnittstelle zum Betriebssystem . Wenn du dich für genauere Details interressierst, wären Bücher wie Undocumented WindowsNT interressant.

    Das war der Teil zu Windows, unter Linux nennt sich die Schnittstelle zum Betriebssystem POSIX, das ist ein Standard, so wie ISO-C99, nach welchem die Schnittstelle erschaffen wurde (Windows untersützt neben der Winapi auch POSIX, allerdings nur einen sehr alten standard, der fast nichts kann, daher verwendet ihn auch niemand), die C Bibliothek ruft hier einfach die entsprechenden Funktionen auf.

    Sehr viele Funktionen in den Betriebssystemschnittstellen sind denen aus der Standardbibliothek von C sehr ähnlich, daher haben es die Entwickler der C Standardbibliothek nicht unmenschlich schwer, sondern können die Standardbibliothek einfach in C schreiben und die entsprechenden Betriebssystemfunktionen aufrufen.
    Und das Betriebssystem selbst hat auch nur auf der untersten Ebene Assembler Code, der Rest ist auch da in ner höheren Sprache (derzeit sind alle großen Betriebssysteme in C/C++) geschrieben.



  • diese werden in der Registry angegeben

    glaube das ist falsch.



  • Habe recht lange geschrieben und Ponto hat währenddessen sein Posting abgesetzt.

    Ponto dein Beispiel stammt wohl aus einem *NIX.
    In der printf Funktion von Microsoft's Visual C++.NET findet man nicht eine einzige Zeile Assembler Code, es werden dort Hilfsfunktionen zur Ausgabe verwendet, welche selbst wiederum die Betriebssystemschnittstelle benutzen.



  • falsch! schrieb:

    diese werden in der Registry angegeben

    glaube das ist falsch.

    Habe eben nachgesehen und du hast recht, hatte da etwas falsch in Erinnerung, denn es gibt einen Registry Wert in welchen man dlls eintragen kann die jedes Programm beim starten mitlädt, jedoch nicht die system dlls.
    Denn diese liegen in einem Adressraum auf welches jeder Prozess lesezugriff hat (beim Schreibzugriff wird eine Kopie im eigenen Raum für den Prozess erstellt), so spart man Speicher.



  • User-- schrieb:

    Habe recht lange geschrieben und Ponto hat währenddessen sein Posting abgesetzt.

    Ponto dein Beispiel stammt wohl aus einem *NIX.
    In der printf Funktion von Microsoft's Visual C++.NET findet man nicht eine einzige Zeile Assembler Code, es werden dort Hilfsfunktionen zur Ausgabe verwendet, welche selbst wiederum die Betriebssystemschnittstelle benutzen.

    Klar, ich spreche nur über UNIX. Und auch dort ruft printf wahrscheinlich nicht direkt write auf. Aber irgendwann muss write mit dem Deskriptor 1 aufgerufen werden.



  • nein mit dem Deskriptor stdout



  • nein schrieb:

    nein mit dem Deskriptor stdout

    stdout ist ein FILE * und kein Deskriptor. Und auf welchem Unix System ist der entsprechende Stream nicht mit Deskriptor 1 verbunden?



  • ab Linux 9.3 ist stdout standartmässig mit deskriptor 1 verbunden.



  • libc-user schrieb:

    ab Linux 9.3 ist stdout standartmässig mit deskriptor 1 verbunden.

    Der ist gut. 🙂



  • ponto:
    Dein Code-Beispiel ist schön illustrativ - jetzt kann ich mir
    in etwa vorstellen, wie das programmtechnisch realisiert ist. thx.


Anmelden zum Antworten