Есть два ответа на ваш вопрос, прямой ответ и ответ на вашу проблему XY. Во-первых, последний. Как правило, программы, которые могут выводить цвет / форматирование, подходящее для терминала, или обычный текст, выбирают их по умолчанию на основе isatty
, но позволяют передавать явный параметр, чтобы включить или отключить его. Для GCC это -fdiagnostics-color=always
. Это почти наверняка то, что вы должны использовать.
Но чтобы ответить на ваш первоначальный вопрос, способ сделать это не использовать канал, а вместо этого псевдо-tty (pty). Для этого используются следующие интерфейсы POSIX: posix_openpt
, grantpt
, unlockpt
и ptsname
(чтобы получить имя открываемого устройства). Но есть гораздо более приятный нестандартизированный интерфейс, openpty
, который делает все за вас за один вызов, и сопровождающий forkpty
, который автоматически разветвляется и подключается к нему через stdin / out / err ребенка. Я бы использовал один из них, если он доступен (они доступны в glibc и musl в системах Linux и в большинстве / во всех системах BSD).