Forum: Compiler & IDEs stderr und fprintf


von Fragender (Gast)


Lesenswert?

Warum wird stderr eigentlich immer mit fprintf verwendet und nicht mit 
printf?
Hier zB.:
1
        if (ctx->debug) {
2
            fprintf(stderr,
3
                    "Message length not corresponding to the computed length (%d != %d)\n",
4
                    rsp_length, rsp_length_computed);
5
        }

von holger (Gast)


Lesenswert?

>Warum wird stderr eigentlich immer mit fprintf verwendet und nicht mit
>printf?

Schau dir den Prototypen und die Parameterliste für den Aufruf
von printf an, dann weisst du es.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Fragender schrieb:
> Warum wird stderr eigentlich immer mit fprintf verwendet und nicht mit
> printf?

printf geht hach stdout, nicht nach stderr.  Guckstdu C-Standard.

von eagle user (Gast)


Lesenswert?

das müsste sich mit dup()/dup2() austrixen lassen...

von Stephan Baerwolf (Gast)


Angehängte Dateien:

Lesenswert?

Anbei ein Stueckchen Code.
1
XXXXXX:/tmp$ gcc -o main main.c
2
XXXXXX:/tmp$ ./main > /dev/null
3
written to stderr...
4
also written to stderr..

MfG

von Dr. Sommer (Gast)


Lesenswert?

eagle user schrieb:
> das müsste sich mit dup()/dup2() austrixen lassen...

dup ist eine POSIX-Funktion (gibts zB nicht unter Windows). (f)printf 
sind Standard-C(++)-Funktionen, die gibts auf allen Plattformen die 
C(++) korrekt unterstützen (auch Windows). Sollte man daher nicht 
durcheinander werfen; dass das so geht ist von C nicht vorgesehen.

von Rolf M. (rmagnus)


Lesenswert?

Fragender schrieb:
> Warum wird stderr eigentlich immer mit fprintf verwendet und nicht mit
> printf?

Weil man bei printf gar nicht wählen kann, wohin die Ausgabe gehen soll. 
Es geht grundsätzlich immer nach stdout. Du könntest aber umgekehrt 
fprintf auch mit stdout benutzen, wenn du das unbedingt alles mit der 
selben Funktion machen willst.

Dr. Sommer schrieb:
> eagle user schrieb:
>> das müsste sich mit dup()/dup2() austrixen lassen...
>
> dup ist eine POSIX-Funktion (gibts zB nicht unter Windows).

Abgesehen davon geht die Ausgabe immer noch nach stdout. Das ist jetzt 
nur auf Systemebene mit einem anderen Stream verbunden. Auf der C-Seite 
bleibt ein printf(...) aber äquivalent zu einem fprintf(stdout, ...).

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Rolf M. schrieb:
> Weil man bei printf gar nicht wählen kann, wohin die Ausgabe gehen soll.
> Es geht grundsätzlich immer nach stdout.

... das man mit freopen() umbiegen kann.

Allerdings ist dieser Dateiname dann noch weniger portabel as FD 2.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.