2009-12-25 6 views
21

Linux gcc 4.4.1einen Text in printf machen erscheinen in grün und rot

ich folgende fprintf Aussage haben und ich würde das OK als grün haben möchten und die als rote FAILED. Ist das möglich?

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

Vielen Dank für Ihre Anregungen,

Antwort

24

Sie wahrscheinlich eine Bibliothek wie ncurses behandeln Terminal verwenden soll.

Alternativ unter Linux können Sie einige Konsole Escape-Sequenzen verwenden, wie zum Beispiel:

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

(in diesem Fall 32 steht für grün), aber es weder tragbar noch elegant.

+0

Auf jeden Fall besser, die Bibliothek zu verwenden - feste Verdrahtung Terminal Escape-Sequenzen ist schlecht, und die damit verbundenen Probleme sind die Gründe, warum die Curses - Bibliothek erfunden wurde (oder sind ein großer Teil des Grundes). –

63

Ich verwende die folgenden Makros, um Farbe zum Terminalausgang hinzuzufügen.

#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 */ 

... und verwenden wie

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

Anwendungsbeispiel Colored grep?

Und für Ihr Beispiel

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

Danke für die brillante Antwort – kapil

Verwandte Themen