Faire apparaître du texte dans printf en vert et en rouge

linux gcc 4.4.1

J’ai la déclaration fprintf suivante et j’aimerais avoir OK en vert et FAILED en rouge. Est-ce possible?

if(devh == -1) { fprintf(stderr, "Device [ FAILED ]\n"); } else { fprintf(stderr, "Device [ OK ]\n"); } 

Merci beaucoup pour vos suggestions,

Vous devriez probablement utiliser une bibliothèque telle que ncurses pour gérer les terminaux.

Alternativement, sous Linux, vous pouvez utiliser certaines séquences d’échappement de la console telles que:

 printf ("\033[32;1m OK \033[0m\n"); 

(dans ce cas, 32 signifie vert), mais ce n’est ni portable ni élégant.

J’utilisais les macros suivantes pour append de la couleur à la sortie du terminal.

 #define RESET "\033[0m" #define BLACK "\033[30m" /* Black */ #define RED "\033[31m" /* Red */ #define GREEN "\033[32m" /* Green */ #define YELLOW "\033[33m" /* Yellow */ #define BLUE "\033[34m" /* Blue */ #define MAGENTA "\033[35m" /* Magenta */ #define CYAN "\033[36m" /* Cyan */ #define WHITE "\033[37m" /* White */ #define BOLDBLACK "\033[1m\033[30m" /* Bold Black */ #define BOLDRED "\033[1m\033[31m" /* Bold Red */ #define BOLDGREEN "\033[1m\033[32m" /* Bold Green */ #define BOLDYELLOW "\033[1m\033[33m" /* Bold Yellow */ #define BOLDBLUE "\033[1m\033[34m" /* Bold Blue */ #define BOLDMAGENTA "\033[1m\033[35m" /* Bold Magenta */ #define BOLDCYAN "\033[1m\033[36m" /* Bold Cyan */ #define BOLDWHITE "\033[1m\033[37m" /* Bold White */ 

… et utiliser comme

 printf( GREEN "Here is some text\n" RESET ); 

Exemple d’utilisation grep coloré?

Et pour votre exemple

 if(devh == -1) { fprintf(stderr, "Device [ " RED "FAILED" RESET " ]\n"); } else { fprintf(stderr, "Device [ " GREEN "OK" RESET " ]\n"); }