Determine whether process output is being redirected in C/C++

后端 未结 3 2108
悲哀的现实
悲哀的现实 2020-12-10 04:18

I\'m writing command line utility for Linux. If the output (stdout) is going to a shell it would be nice to print some escapes to colorize output. But if the output is being

相关标签:
3条回答
  • 2020-12-10 04:47

    You can use isatty on linux. This function is obviously not standard C, since - for example - on many platforms you can't redirect the output to a file.

    0 讨论(0)
  • 2020-12-10 04:53

    In (non-standard) C, you can use isatty(). In perl, it is done with the -t operator:

    $ perl -E 'say -t STDOUT'
    1
    $ perl -E 'say -t STDOUT' | cat
    
    $
    

    In the shell you can use test:

    $ test -t 1 && echo is a tty
    is a tty
    $ (test -t 1 && echo is a tty ) |  cat
    $
    
    0 讨论(0)
  • 2020-12-10 04:58

    Have a look at this code:

    int is_redirected(){
       if (!isatty(fileno(stdout))){
           fprintf(stdout, "argv, argc, someone is redirecting me elsewhere...\n");
           return 1;
       }
       return 0;
    }
    
    /* ... */
    int main(int argc, char **argv){
        if (is_redirected()) exit(-1);
        /* ... */
    }
    

    That function will return 1 if the program is being redirected. Notice in the main(...) how it is called. If the program was to run and is being redirected to stderr or to a file the program exits immediately.

    0 讨论(0)
提交回复
热议问题