Armenian Knowledge Base  

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

Reply
 
LinkBack Thread Tools
Old 17.08.2004, 07:04   #1
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 40
Posts: 4,188
Downloads: 0
Uploads: 0
Reputation: 29 | 3
Default stdout redirection

Люди, никаких мыслей нет как можно в своем же процессе stdout редиректнуть?
Reply With Quote
Old 17.08.2004, 07:20   #2
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
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
Reply With Quote
Old 17.08.2004, 07:27   #3
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 40
Posts: 4,188
Downloads: 0
Uploads: 0
Reputation: 29 | 3
Default

Ой Вить, то была другая задача. я тогда про цоут спрашивал. streambuf -ом нормально получилось.
Мне не в файл надо а редиректать к примеру в стринг. и реалтиме выводить стринг по мере поступления строк. мониторить этот файл довольно неинтересно. Вот если б FILE * связать с цоут -ом.. было бы интересно.. а как..
вот popen() вроде интересня штука. ща почитаюсь..
Reply With Quote
Old 17.08.2004, 07:31   #4
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

ну смотри, я тут цоут и связал с FILE* ом, кстати.
А чтоб в стринг, то это уже не пойдет... пользуйся stringstream - ом заместо cout - а.
Reply With Quote
Old 17.08.2004, 07:36   #5
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 40
Posts: 4,188
Downloads: 0
Uploads: 0
Reputation: 29 | 3
Default

Уф. вопшем сенц: есть функции, к которым доступа я не имею(т.е. заменить там ничего не могу.), которые в моем процессе же вызывают printf(). Вместо того чтоб выводить на stdout мне надо выводить это дело в логвиндоу к примеру.
Reply With Quote
Old 17.08.2004, 07:38   #6
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

А лог виндоу может следить за файлом, когда в него что либо записывается?
Например - проверять лас врайт дейт? Если может - тогда, как сделал я в примере переводи все в лог файл, а лог виндоу пусть из него грузит.
Reply With Quote
Old 17.08.2004, 08:07   #7
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 40
Posts: 4,188
Downloads: 0
Uploads: 0
Reputation: 29 | 3
Default

Когда проверять ласт врайт дейт? Всегда? Это наихудший вариант. НОвый тред для этого надо. Или сигнал генерируется? ворде генерируется на стейт чендж..
Так, подругому:
как мне поймать факт изменения файла? система линукс.
Reply With Quote
Old 17.08.2004, 08:12   #8
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

про линукс это уже не ко мне
ну кстати можно так. Раз в 2 секунды читать файл.
Если не будет новых записей - то ничего не прочтется
если будут прочтется. Только лог файл надо быдет открыть с шарингом на запись.
Reply With Quote
Old 17.08.2004, 08:22   #9
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 40
Posts: 4,188
Downloads: 0
Uploads: 0
Reputation: 29 | 3
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.

Кто -нить знает что значит бикамс поссибл?
Reply With Quote
Old 17.08.2004, 08:23   #10
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

как только в файл можно что-либо записать или прочитать - будет тебе сигнал.
Reply With Quote
Old 17.08.2004, 08:28   #11
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 40
Posts: 4,188
Downloads: 0
Uploads: 0
Reputation: 29 | 3
Default

а когда это происходит? каждый раз как запишу в файл? или при смене стейта файла? А ладно, ща попробую
Reply With Quote
Old 18.08.2004, 10:12   #12
Дошкольник
 
Join Date: 03 2003
Location: 2A
Age: 49
Posts: 104
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

перехват системных функции
http://www.lowlevel.ru/articles/sys_call.htm
Reply With Quote
Old 20.08.2004, 17:29   #13
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 41
Posts: 524
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

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

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 11:47.


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