Wie funktioniert iostream



  • Hallo

    Blöde Frage, aber wie funktioniert die iostream Bibliothek(Ein- und Auslesen von Zeichen) grob gesagt?
    Müsste die nicht in Assembler geschrieben sein?
    Ich zerbreche mir schon lange darüber den Kopf 😕

    Viele Grüße tuxer



  • Sieh dir die Header (auch istream, ostream) doch einfach an. Findest du da nicht schon die Antworten, die du suchst?



  • @matze: Die sind meistens sehr verschachtelt und verwirrend, ist kein Einfaches sich da durchzuprügeln.

    ISO-C++: Schreibt nur die Schnittstellen und die Eigenschaften vor, die die iostream-Bibliothek haben muss.

    Je nach Compiler hast du dann eine eigene Standard-Bibliothek-Implementierung dabei. Z.B. liefert der VC++ "P.J. Plauger". Die Implementierung ist immer für ein bestimmtes Betriebssystem geschrieben (z.B. Windows).

    Es werden also in der Implementierung Funktionen von Windows aufgerufen (WinAPI). Wenn du also cout << "Hello World" machst wird irgnedwo weit weit drnuter ein WriteConsoleOuptut() daraus.

    ISO-C++ heißt also nicht, dass daraus plattformunabhängige Programme erstellt werden können, sondern nur, dass plattformunabhängiger Code erstellt wird.

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • iostream etc. sind Klassen, dürften also in C++ geschrieben sein. doch warum willst du das wissen? Einfach benutzen!



  • Böde frage!! Manche interessieren sich einfach dafür was hinter den kulissen geschieht.

    Ne Frau interessiert sich bspw. auch nich wie ein Motor eines Auto funktioniert.. wollen aber die dicksten und schönsten schnellsten autos fahren ^^



  • tuxer schrieb:

    Müsste die nicht in Assembler geschrieben sein?

    Nein, daß muß nicht der Fall sein. Es gibt dafür zwei Möglichkeiten, erstens man verwendet die C API des OS, zweitens man kann direkt Kernelfunktionen nutzen was letztlich schneller ist. Die gcc Implementierung kannst Du Dir im Source anschauen, bei vielen anderen Compilern wird kein Sourcecode mitgeliefert, und somit läßt sich die Frage wohl nur über eine Anfrage beim Hersteller beantworten.



  • Danke 🙂

    berniebutt schrieb:

    Einfach benutzen!

    wäre schwierig ohne :p



  • printf() ?



  • T0bi schrieb:

    printf() ?

    hoffentlich nicht.

    cheers, Swordfish



  • T0bi schrieb:

    printf() ?

    ...und wie funktioniert nun printf()?... it's magic

    MfG SideWinder



  • Swordfish schrieb:

    T0bi schrieb:

    printf() ?

    hoffentlich nicht.

    cheers, Swordfish

    Wieso nicht?

    Prost, Pottwal.



  • früher ging das mit dem DOS-Interrupt ( __asm int 0x21 ).
    Man lädt die CPU-Register mit den Daten für die Funktion, die man haben will und DOS erledigt den Rest.
    Bin da aber nicht so fit.

    [ der folgende Code ist vermutlich falsch/unsinnig ]

    mov ah, 0x06 // 0x06 heißt man will Konsolen-Output
    mov dl, 'A'  // 'A' soll ausgegeben werden
    int 0x21     // DOS-Interrupt
    


  • Pottwal schrieb:

    Swordfish schrieb:

    T0bi schrieb:

    printf() ?

    hoffentlich nicht.

    cheers, Swordfish

    Wieso nicht?

    Prost, Pottwal.

    Wahrscheinlich, weil printf() C und nicht C++ ist. iostream besitzt Vorteile bezüglich der Sicherheit und hat auch moderne Funktionen.



  • SideWinder schrieb:

    T0bi schrieb:

    printf() ?

    ...und wie funktioniert nun printf()?... it's magic

    MfG SideWinder

    Das wird wiederum cout benutzen!! 🙄

    __deprecated schrieb:

    früher ging das mit dem DOS-Interrupt ( __asm int 0x21 ).
    Man lädt die CPU-Register mit den Daten für die Funktion, die man haben will und DOS erledigt den Rest.
    Bin da aber nicht so fit.

    [ der folgende Code ist vermutlich falsch/unsinnig ]

    mov ah, 0x06 // 0x06 heißt man will Konsolen-Output
    mov dl, 'A'  // 'A' soll ausgegeben werden
    int 0x21     // DOS-Interrupt
    

    Ja, so wird das letztendlich hinter der ganzen Fassade gemacht! Und es wird tatsächlich so gemacht.
    Ich frage mich nur, wie das ganze gehandhabt wird wenn man mehrere Konsolen hat?! Da muss es ja hardwaremäßig wieder ne kleine Rezeptur geben.



  • Thomy schrieb:

    Ich frage mich nur, wie das ganze gehandhabt wird wenn man mehrere Konsolen hat?! Da muss es ja hardwaremäßig wieder ne kleine Rezeptur geben.

    Was unterhalb der I/O-Streams geschieht ist schlicht sache des Betriebssystems. Die Verschiedenen Implementierungen der STL rufen vom Betriebssystem bereitgestellte Funktionen auf. Unter Windows ist das die Win32 API bzw. die NT API, unter Linux Syscalls. In letzter Konsequenz wird es unter ziemlich allen Betriebssystemen wahrscheinlich der Graphikkartentreiber sein, der die Pixel auf den Schirm bringt.

    Wie dem auch sei, C++ kümmert das nicht.

    cheers, Swordfish



  • die frage, die mich immer schon beschäftigt hat: wo zum teufel schreibt cout hin, wenn man mit C++ einen toaster programmiert?



  • queer_boy schrieb:

    die frage, die mich immer schon beschäftigt hat: wo zum teufel schreibt cout hin, wenn man mit C++ einen toaster programmiert?

    Na. Auf den Toast. Ist doch klar. 😃

    EDIT:

    http://www.theredskull.com/pics/toast.jpg

    Hier lief das Programm:

    #include <iostream>
    int toast = 0;
    int main ()
    {
    std::cout << "TOAST";
    return toast;
    }
    


  • ich glaube queer_boy meint wie man elektrische Schaltungen Programmiert 😮


Anmelden zum Antworten