Узнать перенаправлен ли вывод программы в файл?
От: oli.wan Украина  
Дата: 29.04.11 11:05
Оценка:
в последний рабочий день недели пришла в голову задача:
как программно узнать был ли вывод программы перенаправлен в файл?
Re: Узнать перенаправлен ли вывод программы в файл?
От: ononim  
Дата: 29.04.11 11:37
Оценка:
OW>в последний рабочий день недели пришла в голову задача:
голова должна задачи решать, а не придумывать

OW>как программно узнать был ли вывод программы перенаправлен в файл?

GetFileType(GetStdHandle(STD_OUTPUT_HANDLE))
?
Как много веселых ребят, и все делают велосипед...
Re: Узнать перенаправлен ли вывод программы в файл?
От: kpcb Россия  
Дата: 29.04.11 11:45
Оценка:
Здравствуйте, oli.wan, Вы писали:

OW>в последний рабочий день недели пришла в голову задача:

OW>как программно узнать был ли вывод программы перенаправлен в файл?

Для мака (возможно и для других никсов) это делается так:

#include <sys/fcntl.h>
#include <cstdio>

int main(int argc, char *argv[])
{
    char buf[4096];
    for(int i = 0; i < 3; ++i) {
        int status = fcntl(i, F_GETPATH, buf);
        fprintf(stderr, "descriptor: %d path: %s\n", i, buf);
    }
    return 0;
}


Для проверки:

mac106:tmp sergey$ g++ test.cpp && ./a.out 
descriptor: 0 path: /dev/ttys001
descriptor: 1 path: /dev/ttys001
descriptor: 2 path: /dev/ttys001
mac106:tmp sergey$ g++ test.cpp && ./a.out 1>/tmp/foo.txt
descriptor: 0 path: /dev/ttys001
descriptor: 1 path: /private/tmp/foo.txt
descriptor: 2 path: /dev/ttys001
mac106:tmp sergey$
Re: Узнать перенаправлен ли вывод программы в файл?
От: rtbsd http://rtbsd.org/
Дата: 29.04.11 19:33
Оценка:
Здравствуйте, oli.wan, Вы писали:

OW>в последний рабочий день недели пришла в голову задача:

OW>как программно узнать был ли вывод программы перенаправлен в файл?
Кроме того, у консолей/терминалов есть специфические ioctl, не реализованные для настоящих файлов.
У конвейеров, вероятно, тоже что-то есть...
Все написано там
Re: Узнать перенаправлен ли вывод программы в файл?
От: rising_edge  
Дата: 02.05.11 14:23
Оценка:
Здравствуйте, oli.wan, Вы писали:

OW>как программно узнать был ли вывод программы перенаправлен в файл?


Частично ответ на этот вопрос даёт isatty(3).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.