c++ qfile - Detecta si stdin es un terminal o una tubería?




3 Answers

Use 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");

(En ventanas están precedidos por guiones bajos: _isatty , _fileno )

en qt

Cuando ejecuto " python " desde el terminal sin argumentos, aparece el shell interactivo de Python.

Cuando ejecuto " cat | python " desde el terminal, no se inicia el modo interactivo. De alguna manera, sin obtener ninguna entrada, ha detectado que está conectado a una tubería.

¿Cómo haría una detección similar en C o C ++ o Qt?




Llamar a stat () o fstat () y ver si S_IFIFO está configurado en st_mode.




Puede invocar stat(0, &result) y verificar !S_ISREG( result.st_mode ) . Eso es Posix, no C / C ++, sin embargo.




Related