Pytanie Wykryj w C, jeśli wyprowadzasz na terminal


Piszę program w języku C dla systemów OS X i Linux i chcę poprawić wydajność w zależności od tego, czy ma być podłączony do terminala. Wiem, że omówiliśmy, jak to zrobić w skrypcie powłoki, np. tutaj:

Wykrywanie typu strumienia wyjściowego skryptu powłoki

Ale jak mam to zrobić w programie C?


20
2018-06-30 03:27


pochodzenie




Odpowiedzi:


Posługiwać się 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.

Od stdout jest zawsze deskryptorem pliku 1, możesz zrobić:

if(isatty(1))
    // stdout is a terminal

37
2018-06-30 03:31



Czy mógłbyś wyjaśnić nieco głębiej? Co tak naprawdę sprawdza ta funkcja? Co tak naprawdę oznacza connected to a terminal ? - xolodec
@PavelShvechikov Oznacza to, że deskryptor pliku jest powiązany z urządzeniem, które jest uważane za terminal. Widzieć en.wikipedia.org/wiki/POSIX_terminal_interface - Laurence Gonsalves


if (isatty (1))
    fprintf (stdout, "Outputting to a terminal.");
else
    fprintf (stdout, "Not outputting to a terminal.");

5
2018-06-30 03:34