Обнаружение в C при выводе на терминал

20

Я пишу программу C для OS X и Linux, и я хочу настроить выход на основе того, идет ли он к терминалу. Я знаю, что мы рассмотрели, как это сделать в сценарии оболочки, например. здесь:

Обнаружение типа выходного потока сценария оболочки

Но как это сделать в программе на C?

    
задан Paul A Jungwirth 30.06.2009 в 05:27
источник

2 ответа

37

Используйте isatty() :

$ man isatty
ISATTY(3)                  Linux Programmer's Manual                 ISATTY(3)

NAME
       isatty - does this descriptor refer to a terminal

SYNOPSIS
       #include <unistd.h>

       int isatty(int desc);

DESCRIPTION
       returns  1  if  desc is an open file descriptor connected to a terminal
       and 0 otherwise.

Так как stdout всегда является файловым дескриптором 1, вы можете сделать:

if(isatty(1))
    // stdout is a terminal
    
ответ дан Laurence Gonsalves 30.06.2009 в 05:31
  • И не могли бы вы объяснить немного глубже? Что действительно проверяется этой функцией? Что на самом деле означает подключение к терминалу? –  xolodec 08.02.2014 в 09:13
  • @PavelShvechikov Это означает, что файловый дескриптор связан с устройством, которое считается терминалом. См. En.wikipedia.org/wiki/POSIX_terminal_interface –  Laurence Gonsalves 08.02.2014 в 20:28
5
if (isatty (1))
    fprintf (stdout, "Outputting to a terminal.");
else
    fprintf (stdout, "Not outputting to a terminal.");
    
ответ дан dreamlax 30.06.2009 в 05:34