Eigene print-Funktion ohne stdio.h
-
Hier die Implementierung in der glibc http://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/vfprintf.c;h=d5690342536bc8cf948c786f663bb63f73f91f3a;hb=HEAD und hier die von vsnprintf im Linux-Kernel https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=lib/vsprintf.c;h=c3f36d415bdf43034415c801b8e3f922f5e5b928;hb=133fd9f5cda2d86904126f4b9fa4e8f4330c9569
-
danke, aber die implementierung in glibc hat auch den header stdio.h includiert.
-
wie geht das? schrieb:
danke, aber die implementierung in glibc hat auch den header stdio.h includiert.
Klar, da sind ja auch die Sachen drin definiert, die stdio.c braucht.
Willst du jetzt erstmal ein putchar nachbasteln oder gleich in die Vollen mit printf?
-
DirkB schrieb:
Willst du jetzt erstmal ein putchar nachbasteln oder gleich in die Vollen mit printf?
warum? ist putchar wohl einfacher?
-
wie geht das? schrieb:
danke, aber die implementierung in glibc hat auch den header stdio.h includiert.
Ah, du verstehst den Unterschied zwischen Header und Library nicht. Gut, hier ist printf ohne stdio.h
/* hier in C89 */ main() { printf("Hello %g\n", 0.5); return 0; }
// hier in C99/11 int printf(const char * restrict format, ...); int main(void) { printf("Hello %g\n", 0.5); }
Der Header enthält nur Deklarationen. Die Implementierung findet man dann aber in der Bibliothek. Die glibc ist so eine Implementierung und ob die stdio.h einbinden oder nicht ist dabei egal.
-
putchar gibt ein Zeichen auf stdout aus.
printf benutzt putchar um Zeichen auszugeben.
putchar ist in stdio.h deklariert.Du willst kein stdio.h -> also auch kein putchar.
Du musst erstmal die Basis schaffen.Es sei denn, du willst ein my_printf machen das putchar nutzt.
Also Auswertung vom Formatstring, lesen der variablen Parameterliste usw.Was du genau machen willst, hast du leider noch nicht gesagt.
-
@rüdiger: danke, den unterschied wusste ich wirklich nicht!
@DirkB: dann werde ich wohl erstmal putchar ohne stdio.h machen. ich kapier allerdings immernoch nicht, wie das geht...
-
wie geht das? schrieb:
@DirkB: dann werde ich wohl erstmal putchar ohne stdio.h machen. ich kapier allerdings immernoch nicht, wie das geht...
Dafür nimmst du die Funktionen des Betriebssystems. zB man: write(2) unter Linux/OSX.
-
rüdiger schrieb:
wie geht das? schrieb:
@DirkB: dann werde ich wohl erstmal putchar ohne stdio.h machen. ich kapier allerdings immernoch nicht, wie das geht...
Dafür nimmst du die Funktionen des Betriebssystems. zB man: write(2) unter Linux/OSX.
und unter win?
-
Schau dir doch mal ein putchar.c an. Ist doch kein Geheimnis.
-
wie geht das? schrieb:
rüdiger schrieb:
wie geht das? schrieb:
@DirkB: dann werde ich wohl erstmal putchar ohne stdio.h machen. ich kapier allerdings immernoch nicht, wie das geht...
Dafür nimmst du die Funktionen des Betriebssystems. zB man: write(2) unter Linux/OSX.
und unter win?
Warum hast du das überhaupt vor? Für jemanden der printf nachprogrammieren möchte, scheinst du weder den Ansatz eines Plans zu haben, noch scheinst du genau zu wissen, was du überhaupt genau möchtest. Wir können dir doch nicht alles aus der Nase ziehen, was du überhaupt willst, noch dir jede Kleinigkeit vormachen.
-
SeppJ schrieb:
wie geht das? schrieb:
rüdiger schrieb:
wie geht das? schrieb:
@DirkB: dann werde ich wohl erstmal putchar ohne stdio.h machen. ich kapier allerdings immernoch nicht, wie das geht...
Dafür nimmst du die Funktionen des Betriebssystems. zB man: write(2) unter Linux/OSX.
und unter win?
Warum hast du das überhaupt vor? Für jemanden der printf nachprogrammieren möchte, scheinst du weder den Ansatz eines Plans zu haben, noch scheinst du genau zu wissen, was du überhaupt genau möchtest. Wir können dir doch nicht alles aus der Nase ziehen, was du überhaupt willst, noch dir jede Kleinigkeit vormachen.
um zu kapieren, wie das funktioniert. und nein, ich habe tatsächlich keinen plan, und da helfen auch sachen wie "zB write(2) unter Linux/OSX." nicht weiter, wenn ich unter windows programmieren will.
-
wie geht das? schrieb:
um zu kapieren, wie das funktioniert. und nein, ich habe tatsächlich keinen plan, und da helfen auch sachen wie "zB write(2) unter Linux/OSX." nicht weiter, wenn ich unter windows programmieren will.
Das mit Windows hast du ja gerade erst gesagt.
Da wird es irgendeine WinAPI-Funktion geben.Hängt auch davon ab, ob du das in einem Fenster oder in der Konsole machen willst.
Mach doch ein putchar über eine TCP/IP-Verbindung und verbinde dich mit putty oder netcat.
Ist bestimmt einfacher.
-
Mal eine Frage in die Runde: gibt es dazu was im Projekt: OS-Development?
-
DirkB schrieb:
wie geht das? schrieb:
um zu kapieren, wie das funktioniert. und nein, ich habe tatsächlich keinen plan, und da helfen auch sachen wie "zB write(2) unter Linux/OSX." nicht weiter, wenn ich unter windows programmieren will.
Das mit Windows hast du ja gerade erst gesagt.
Da wird es irgendeine WinAPI-Funktion geben.Hängt auch davon ab, ob du das in einem Fenster oder in der Konsole machen willst.
Mach doch ein putchar über eine TCP/IP-Verbindung und verbinde dich mit putty oder netcat.
Ist bestimmt einfacher.der punkt ist: ich weiß immernoch nicht, wie sowas funktioniert, wie soll ich dann eine tcp-verbindung machen? inwiefern vereinfacht das was?
-
Wie das genau unter Windows geht, können dir die Leute im DOS/Win32-Konsolen-Forum sicher beantworten. Ich verschiebe dich einfach mal dahin.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Willst du nur irgend eine Ersatzfunktion für printf, oder den Quelltext für printf nachvollziehen oder nachbauen?
Es gibt ja auch ein paar open Source Compiler-Projekte. Eventuell da mal in den Quelltext schauen?
In grauer Vorzeit unter DOS fing das etwa so an mit der Ausgabe auf dem Bildschirm:
http://en.wikipedia.org/wiki/INT_10H
-
DirkB schrieb:
Mal eine Frage in die Runde: gibt es dazu was im Projekt: OS-Development?
PrettyOS implementiert natürlich eine printf-Funktion, ohne stdio zu nutzen, denn stdio müsste ja ebenfalls erstmal implementiert werden. Eigene printf-Routinen sind aber grundsätzlich nicht platformunabhängig, da sie auf die native API des jeweiligen OS, direkt auf die Hardware (Also quasi ein Treiber) oder des BIOS zurückgreifen müssen.
-
um zu kapieren, wie das funktioniert. und nein, ich habe tatsächlich keinen plan, und da helfen auch sachen wie "zB write(2) unter Linux/OSX." nicht weiter, wenn ich unter windows programmieren will.
Lerne erstmal programmieren. Dann sehen wir weiter.