Вот очень хорошо известный пример того, как определить, перенаправлен ли стандартный вывод терминала в файл, чтобы проиллюстрировать использование fileno
функции POSIX
if (!isatty(fileno(stdout))){
fprintf(stdout, "argv, argc, someone is redirecting me elsewhere...\n");
return 1;
}
Если использовать вышеуказанный код впрограмма, и указанная программа была выполнена следующим образом:
foobar_program > foobar_program.output
'foobar_program.output' будет содержать
argv, argc, someone is redirecting me elsewhere...\n
Указатель файлового потока - это не более чем структура типа указателя на FILE
, то есть FILE *
, fileno
берет эту структуру и преобразует ее в соответствующий файловый дескриптор, соответственно странице руководства для fileno
здесь
The function fileno() examines the argument stream and returns
its integer descriptor.
, а также здесь на страницах справочника posix, и я процитирую fileno - map a stream pointer to a file descriptor
....