Drucken auf stderr in C
-
Verwendung von die Funktion
fprintf
zum Drucken aufstderr
in C -
Verwenden Sie die Funktion
dprintf
, um in C nachstderr
zu drucken -
Verwendung von die Funktion
fwrite
für die Ausgabe instderr
in C
Dieser Artikel stellt mehrere Methoden vor, wie man in C auf stderr drucken kann.
Verwendung von die Funktion fprintf
zum Drucken auf stderr
in C
Die Standard-E/A-Bibliothek in C stellt drei Text-Streams zur Verfügung, die implizit geöffnet werden, wenn das Programm im System gestartet wird. Diese Ströme sind,
- Standardeingabe (
stdin
) - wird zum Lesen von Eingaben verwendet. - Standardausgabe (
stdout
) - wird zum Schreiben von Ausgaben verwendet. - Standard-Fehlerstrom (
stderr
) - wird verwendet, um Fehler- oder Debug-Meldungen während der Laufzeit zu protokollieren.
Um Daten in diese Ströme zu drucken, werden die Funktionen der printf
-Familie verwendet. fprintf
wird normalerweise verwendet, um Text in einen bestimmten Ausgabestrom auszugeben. Wenn wir in stderr
drucken müssen, zielen wir auf den Stream stderr
und übergeben ihn als erstes Argument an die Funktion. Das zweite Argument ist die Formatzeichenkette selbst, die Mittel bereitstellt, um verschiedene Objekte in die Ausgabe einzuschließen und die gegebene Formatierung zu konstruieren. Beachten Sie, dass wir mehrere Zeichenketten in ""
einschließen, da sie bei der Kompilierung automatisch konkateniert werden.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define RED "\e[0;31m"
#define NC "\e[0m"
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, RED "[ERROR]" NC
": No string argument provided! \n"
"You must provide a program path as argument\n");
exit(EXIT_FAILURE);
}
char *str = malloc(strlen(argv[1]) + 1);
strcpy(str, argv[1]);
printf("str: %s\n", str);
free(str);
exit(EXIT_SUCCESS);
}
Ausgabe:
[ERROR]: No string argument provided!
You must provide a program path as argument
Verwenden Sie die Funktion dprintf
, um in C nach stderr
zu drucken
Alternativ können wir die Funktion dprintf
verwenden, die dem Aufruf von fprintf
ähnlich ist, mit dem Unterschied, dass sie den Dateideskriptor als erstes Argument annimmt. Dateideskriptoren in Unix-basierten Systemen sind Integer-Werte, die mit den offenen Dateien des Programms verknüpft sind.
Beachten Sie, dass der Standard-Unix-Header - <unistd.h>
Makro-Definitionen für diese drei erwähnten Ströme enthält - STDIN_FILENO
, STDOUT_FILENO
und STDERR_FILENO
. Wir definieren auch zwei Makros - RED
und NC
, die einfach ASCII-Zeichenketten sind, um die Textfarbe in der Ausgabe zu ändern.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define RED "\e[0;31m"
#define NC "\e[0m"
int main(int argc, char *argv[]) {
if (argc != 2) {
dprintf(STDERR_FILENO, RED "[ERROR]" NC
": No string argument provided! \n"
"You must provide a program path as argument\n");
exit(EXIT_FAILURE);
}
char *str = malloc(strlen(argv[1]) + 1);
strcpy(str, argv[1]);
printf("str: %s\n", str);
free(str);
exit(EXIT_SUCCESS);
}
Ausgabe:
[ERROR]: No string argument provided!
You must provide a program path as argument
Verwendung von die Funktion fwrite
für die Ausgabe in stderr
in C
Eine weitere Alternative zu den vorherigen Funktionen ist fwrite
. Sie wird meist für binäre Stream-E/A verwendet, aber wir können sie auch aufrufen, um Text in Ausgabeströme zu drucken. fwrite
nimmt vier Argumente entgegen, wobei das erste der Zeiger auf die zu druckende Zeichenkette ist. Die nächsten beiden Parameter geben die Anzahl der Datenelemente an, die am Zeiger gespeichert sind, sowie die Größe der einzelnen Datenelemente. Da wir eine einzelne Zeichenkette drucken, kann das dritte Argument 1
sein, und die Größe entspricht der Länge der Zeichenkette. Der vierte Parameter ist die FILE*
, die auf den gewünschten Stream zeigt.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define RED "\e[0;31m"
#define NC "\e[0m"
int main(int argc, char *argv[]) {
if (argc != 2) {
fwrite("[ERROR] : No string argument provided!\n", 39, 1, stderr);
exit(EXIT_FAILURE);
}
char *str = malloc(strlen(argv[1]) + 1);
strcpy(str, argv[1]);
printf("str: %s\n", str);
free(str);
exit(EXIT_SUCCESS);
}
Ausgabe:
[ERROR] : No string argument provided!
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook