Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters > C/C++

Reply
 
Thread Tools

stdout redirection
Old 17.08.2004, 06:04   #1
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 47
Posts: 4,189
Rep Power: 5
Default stdout redirection

Люди, никаких мыслей нет как можно в своем же процессе stdout редиректнуть?

Old 17.08.2004, 06:20   #2
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

Серге, как я уже предлагал - вот решение.
PHP Code:
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;


int main()
{
    
    
FILE = ::freopen("a.txt""w"stdout);
    
printf("test!\n");
    
cout << "test1" << endl;
    
fclose(f);
    return 
0;

все запишется в файл a.txt

Old 17.08.2004, 06:27   #3
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 47
Posts: 4,189
Rep Power: 5
Default

Ой Вить, то была другая задача. я тогда про цоут спрашивал. streambuf -ом нормально получилось.
Мне не в файл надо а редиректать к примеру в стринг. и реалтиме выводить стринг по мере поступления строк. мониторить этот файл довольно неинтересно. Вот если б FILE * связать с цоут -ом.. было бы интересно.. а как..
вот popen() вроде интересня штука. ща почитаюсь..

Old 17.08.2004, 06:31   #4
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

ну смотри, я тут цоут и связал с FILE* ом, кстати.
А чтоб в стринг, то это уже не пойдет... пользуйся stringstream - ом заместо cout - а.

Old 17.08.2004, 06:36   #5
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 47
Posts: 4,189
Rep Power: 5
Default

Уф. вопшем сенц: есть функции, к которым доступа я не имею(т.е. заменить там ничего не могу.), которые в моем процессе же вызывают printf(). Вместо того чтоб выводить на stdout мне надо выводить это дело в логвиндоу к примеру.

Old 17.08.2004, 06:38   #6
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

А лог виндоу может следить за файлом, когда в него что либо записывается?
Например - проверять лас врайт дейт? Если может - тогда, как сделал я в примере переводи все в лог файл, а лог виндоу пусть из него грузит.

Old 17.08.2004, 07:07   #7
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 47
Posts: 4,189
Rep Power: 5
Default

Когда проверять ласт врайт дейт? Всегда? Это наихудший вариант. НОвый тред для этого надо. Или сигнал генерируется? ворде генерируется на стейт чендж..
Так, подругому:
как мне поймать факт изменения файла? система линукс.

Old 17.08.2004, 07:12   #8
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

про линукс это уже не ко мне
ну кстати можно так. Раз в 2 секунды читать файл.
Если не будет новых записей - то ничего не прочтется
если будут прочтется. Только лог файл надо быдет открыть с шарингом на запись.

Old 17.08.2004, 07:22   #9
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 47
Posts: 4,189
Rep Power: 5
Default

Это наихудший вариант...
Вот в libc manual написано : if you set the 0_ASYNC status flag on a file descriptor, a SIGIO signal is sent whenever input or output becomes possible on that file descriptor.

Кто -нить знает что значит бикамс поссибл?

Old 17.08.2004, 07:23   #10
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

как только в файл можно что-либо записать или прочитать - будет тебе сигнал.

Old 17.08.2004, 07:28   #11
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 47
Posts: 4,189
Rep Power: 5
Default

а когда это происходит? каждый раз как запишу в файл? или при смене стейта файла? А ладно, ща попробую

Old 18.08.2004, 09:12   #12
Дошкольник
 
Join Date: 03 2003
Location: 2A
Age: 56
Posts: 104
Rep Power: 0
Default

перехват системных функции
http://www.lowlevel.ru/articles/sys_call.htm

Old 20.08.2004, 16:29   #13
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 47
Posts: 524
Rep Power: 0
Default

Speedy, отвечу не как программист, а как админ: если мне надо следить за файлом и показывать изменения "по мере" - я пользуюсь програмкой tail с опцией -f. Как это запрограммировать - не знаю, но те кто этот tail написали точно знают. А на счет becomes available: я так думаю если кто-то файл отрыл для экслкюзивного чтения/записи (lock поставил каким-либо образом) а потом файл "отпустил" - вот у тебя файл и become available будет.
Reply




Реклама:
реклама

All times are GMT. The time now is 21:18.
Top

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.