Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making some text in printf appear in green and red

Tags:

c

linux gcc 4.4.1

I have the following fprintf statement and I would like to have the OK as green and the FAILED as red. Is this possible?

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

Many thanks for any suggestions,

like image 456
ant2009 Avatar asked Dec 25 '09 14:12

ant2009


People also ask

What is %B in printf?

The Printf module API details the type conversion flags, among them: %B: convert a boolean argument to the string true or false %b: convert a boolean argument (deprecated; do not use in new programs).

How do I change printf color in bash?

For example, if you wanted to print green text, you could do the following: #!/bin/bash # Set the color variable green='\033[0;32m' # Clear the color after that clear='\033[0m' printf "The script was executed ${green}successfully${clear}!"


2 Answers

I use to use the following macros to add color to terminal output.

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

...and use like

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

Example of use Colored grep?

And for your example

if(devh == -1) {     fprintf(stderr, "Device [ " RED "FAILED" RESET " ]\n"); } else {     fprintf(stderr, "Device [ " GREEN "OK" RESET " ]\n"); } 
like image 110
epatel Avatar answered Oct 12 '22 07:10

epatel


You should probably use some library such as ncurses to handle terminal.

Alternatively, under Linux you could use some console escape sequences such as:

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

(in this case 32 stands for green), but it is neither portable nor elegant.

like image 44
el.pescado - нет войне Avatar answered Oct 12 '22 07:10

el.pescado - нет войне