Imprimer pour stderr en C
-
Utilisez la fonction
fprintf
pour imprimer versstderr
en C -
Utilisez la fonction
dprintf
pour imprimer versstderr
en C -
Utilisez la fonction
fwrite
pour imprimer versstderr
en C
Cet article présente plusieurs méthodes pour imprimer en C.
Utilisez la fonction fprintf
pour imprimer vers stderr
en C
La bibliothèque d’E/S standard en C fournit trois flux de texte qui sont ouverts implicitement lorsque le programme est lancé sur le système. Ces flux sont les suivants,
- entrée standard (
stdin
) - utilisée pour la lecture des entrées. - sortie standard (
stdout
) - utilisée pour l’écriture de la sortie. - flux d’erreur standard (
stderr
) - utilisé pour enregistrer les messages d’erreur ou de débogage pendant l’exécution.
Afin d’imprimer des données dans ces flux, les fonctions de la famille printf
sont utilisées. fprintf
est généralement utilisé pour sortir du texte sur un flux de sortie spécifique. Lorsque nous devons imprimer sur stderr
, nous ciblons le flux stderr
et le passons comme premier argument à la fonction. Le second argument est la chaîne de format elle-même, qui fournit des moyens d’inclure différents objets dans la sortie et de construire le formatage donné. Notez que nous incluons plusieurs chaînes de caractères dans ""
car elles seront automatiquement concaténées lors de la compilation.
#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);
}
Production :
[ERROR]: No string argument provided!
You must provide a program path as argument
Utilisez la fonction dprintf
pour imprimer vers stderr
en C
On peut aussi utiliser la fonction dprintf
, qui est similaire à l’appel fprintf
, sauf qu’elle prend le descripteur de fichier comme premier argument. Les descripteurs de fichiers dans les systèmes basés sur Unix sont des valeurs entières associées aux fichiers ouverts du programme.
Notez que l’en-tête standard Unix - <unistd.h>
inclut des définitions de macro pour les trois flux mentionnés comme - STDIN_FILENO
, STDOUT_FILENO
et STDERR_FILENO
. Nous définissons également deux macros - RED
et NC
, qui sont juste des séquences de caractères ASCII pour modifier la couleur du texte dans la sortie.
#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);
}
Production :
[ERROR]: No string argument provided!
You must provide a program path as argument
Utilisez la fonction fwrite
pour imprimer vers stderr
en C
Une autre alternative aux fonctions précédentes est fwrite
. Elle est surtout utilisée pour les entrées/sorties de flux binaires, mais on peut toujours l’appeler pour imprimer du texte sur les flux de sortie. fwrite
prend quatre arguments, et le premier d’entre eux est le pointeur vers la chaîne de caractères qui doit être imprimée. Les deux suivants spécifient la taille du nombre de données stockées au niveau du pointeur et la taille de chacune d’entre elles. Comme nous n’imprimons qu’une seule chaîne de caractères, le troisième argument peut être 1
, et la taille correspond à la longueur de la chaîne. Le quatrième paramètre est le FILE*
qui pointe vers le flux souhaité.
#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);
}
Production :
[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