Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перенаправить вывод в FILE на строку 
:(
    Опции темы
EnergoHokum
Дата 30.10.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Есть ли возможность направить вывод из FILE* в массив символов? В заголовочных файлах нашёл такое описание FILE:
Код

typedef struct _iobuf
{
    char*    _ptr;
    int    _cnt;
    char*    _base;
    int    _flag;
    int    _file;
    int    _charbuf;
    int    _bufsiz;
    char*    _tmpfname;
} FILE;

Попытки "переуказать" _ptr, _base и _tmpfilename (для посмотреть) ни к чему не привели.
PM MAIL ICQ   Вверх
Lazin
Дата 30.10.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



если используешь iostream то можно вместо fstream передать stringstream.
PM MAIL Skype GTalk   Вверх
EnergoHokum
Дата 30.10.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Так, _base - это указатель на что-то, где лежит строка, положенная в fprintf. Но перенацеливание _base, опять же, результата не даёт.

Добавлено через 54 секунды
Не, мне нужен чистый C, stdio.h.
PM MAIL ICQ   Вверх
JackYF
Дата 30.10.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Lazin @  30.10.2007,  16:55 Найти цитируемый пост)
если используешь iostream то можно вместо fstream передать stringstream. 

не понял фразы  smile 

Цитата(EnergoHokum @  30.10.2007,  16:40 Найти цитируемый пост)
Есть ли возможность направить вывод из FILE* в массив символов?

что надо сделать-то? задача какая? что куда?



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Lazin
Дата 30.10.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(JackYF @  30.10.2007,  17:02 Найти цитируемый пост)
Цитата(Lazin @  30.10.2007,  16:55 Найти цитируемый пост)
если используешь iostream то можно вместо fstream передать stringstream. 

не понял фразы  smile 

если есть код работающий с объектом fstream, то можно вместо fstream использовать любой производный от ostream класс например stringstream, да хоть cout.

PM MAIL Skype GTalk   Вверх
JackYF
Дата 30.10.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Lazin @  30.10.2007,  17:31 Найти цитируемый пост)
то можно вместо fstream использовать любой производный от ostream класс например stringstream, да хоть cout.

а, ну это да.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
EnergoHokum
Дата 30.10.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Есть автоматически генерируемый (сторонним кодом, менять - низзя) кусок кода, который сообщения об ошибках выплёвывает в stderr. Есть мой класс логгера, который принимает строку как char*. Нужно перенаправить этот поток ошибок из stderr в экземпляр класса логгера.
PM MAIL ICQ   Вверх
JackYF
Дата 30.10.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



EnergoHokum, ну так:

Код

other_critical_logger | my_log_parser > my_crasy.out


Код

while (!feof(stdin))
{
  fgets(buf, ...)
  // парсим... парсим... построчно
}



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
EnergoHokum
Дата 30.10.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Не, это - не бинарный файл (который ошибками плюётся), этот кусок кода будет вставлен в проект, и нужно как-то программно перенаправить его.
PM MAIL ICQ   Вверх
JackYF
Дата 30.10.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(EnergoHokum @  30.10.2007,  22:42 Найти цитируемый пост)
этот кусок кода будет вставлен в проект

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


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
EnergoHokum
Дата 31.10.2007, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



И запускать его потом из основного CreateProcess-ом? Ну, в принципе, можно, но это - на крайний случай.
PM MAIL ICQ   Вверх
xvr
Дата 31.10.2007, 14:53 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(EnergoHokum @ 30.10.2007,  22:42)
Не, это - не бинарный файл (который ошибками плюётся), этот кусок кода будет вставлен в проект, и нужно как-то программно перенаправить его.

Этот кусок кода компилируется отдельно? Он выводит эти сообщения через какие то стандартные функции (типа fprintf(stderr,...) или аналогично)?
Если да - то можно сделать СВОЙ файл, в который включить include'ом этот самый генерируемый файл, и перед этим include'ом вставить соотвествующее количество #define'ов, в которых переопределить все используемые для вывода фкнкции на свои, которые будут делать тоже самое, но писать не в FILE*, а куда тебе надо
Код

#define fprintf my_fprintf

int my_fprintf(FILE*, const char*, ...);
// Write stirng to my log, instead of FILE*

#include "generated_error_generator.c"

PM MAIL   Вверх
JackYF
Дата 31.10.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(EnergoHokum @  31.10.2007,  07:42 Найти цитируемый пост)
И запускать его потом из основного CreateProcess-ом? Ну, в принципе, можно, но это - на крайний случай. 

хорошо, можно попробовать пайпы - popen, pclose, fread, fwrite....

Тот процесс запускается в какое-то время твоей программой, она же может в какое хочешь время начать читать из этого потока данные.

Это сообщение отредактировал(а) JackYF - 31.10.2007, 16:54


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
chipset
Дата 1.11.2007, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Структура STARTUPINFO для CreateProcess.

Цитата

hStdError

    If dwFlags specifies STARTF_USESTDHANDLES, this member is the standard error handle for the process. Otherwise, this member is ignored and the default for standard error is the console window's buffer.



Помогло?  smile 


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
EnergoHokum
Дата 1.11.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Пока приказано smile переключиться на другое, так что допилю потом. Спасибо всем за помощь, но вопрос пока не закрываю.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0767 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.