El archivo C siguiente da un resultado falso cuando NUL se canaliza a ella:NUL descriptor de archivo (isatty es falso)
int main()
{
printf("_isatty = %d\n", _isatty(0));
}
el resultado es:
C:\Users\Edward\Dev\nulltest> test.exe < NUL
_isatty = 64
Estoy bastante seguro ¡NUL (también conocido como/dev/null) no es un dispositivo terminal! Entonces necesito detectar de otra manera si el descriptor de archivo corresponde o no a NUL. El número no tiene ningún significado específico; Lo veo cuando realmente tengo un terminal conectado.
¿Qué debo hacer? This question sugiere usar una función incompleta no documentada para obtener el nombre subyacente, presumiblemente comparándolo con NUL, pero eso se siente menos que ideal para mí. ¿Hay una mejor manera?
P.S. Esto ayudaría a resolver this GHC bug.
Solo por curiosidad (y no estoy diciendo que lo que estás haciendo está mal): ¿por qué te importa donde la entrada de la venida ¿de? – paxdiablo
Hay muchas aplicaciones que hacen cosas diferentes cuando detectan un terminal. Por ejemplo, si escribe 'python', entrará en modo interactivo, pero 'echo' imprimirá \ "bar \" "| python 'no mostrará ninguna de la pantalla de inicialización. –
Tengo _hate_ esos programas :-) – paxdiablo