Обнаружьте, если stdin является терминалом или каналом?

Aaron - что Вы попытались бы выполнить, повторно инициализировав переменные?

Отредактированный... Красота jQuery, по-моему, является вызовом, назад функционирует. Почему не только имеют некоторое действие/функцию, выполняемое после события.

108
задан Rakete1111 3 October 2016 в 16:22
поделиться

4 ответа

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

#include <stdio.h>
#include <io.h>
...    
if (isatty(fileno(stdin)))
    printf( "stdin is a terminal\n" );
else
    printf( "stdin is a file or a pipe\n");

(в окнах они имеют префикс подчеркивания: _isatty , _fileno )

132
ответ дан 24 November 2019 в 03:31
поделиться

Вызовите stat () или fstat () и посмотрите, установлен ли S_IFIFO в st_mode.

3
ответ дан 24 November 2019 в 03:31
поделиться

Вероятно, они проверяют тип файла, который "stdin" находится с fstat, примерно так:

struct stat stats;
fstat(0, &stats);
if (S_ISCHR(stats.st_mode)) {
    // Looks like a tty, so we're in interactive mode.
} else if (S_ISFIFO(stats.st_mode)) {
    // Looks like a pipe, so we're in non-interactive mode.
}

Конечно, Python - это открытый исходный код, поэтому вы можете просто посмотреть, что они делают точно знаю:

http://www.python.org/ftp/python/2.6.2/Python-2.6.2.tar.bz2

3
ответ дан 24 November 2019 в 03:31
поделиться

Вы можете вызвать stat (0, & result) и проверить наличие ! S_ISREG (result.st_mode) . Но это Posix, а не C / C ++.

2
ответ дан 24 November 2019 в 03:31
поделиться