Если вы пользуетесь консолью, то могли заменить, что обычный вывод стандартных утилит обычно цветной, но если его перенаправить через конвейер |, то цвет “теряется”. Работает это очень просто: через библиотечный вызов isatty определяется, является ли stdout терминалом или нет. Еще дополнительно проверяется через переменные среды, что терминал не совсем урезанный и поддерживает цвет.

А как работает isatty? Делает системный вызов ioctl с такими параметрами, которые сработают только в терминале, т.е. если вызов вернул ошибку, то устройство — не терминал. Эдакий try-catch :)