Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » как FILE перенаправить в строку.

Ответить
Настройки темы
как FILE перенаправить в строку.

Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть некая функция в одной либе.
прототип вроде этого:
int FunctionName(FILE *STREAM, ... );
Возможно-ли и если да то как сделать чтобы она выводила в память а не файл.

Нужно чтобы типа sprintf работала.


Отправлено: 03:54, 04-06-2004

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Может, вместо fopen использовать fdopen? А с потоком уже работать...

Отправлено: 09:46, 04-06-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


LДа, ещё вспомнил - посмотрите man mmap

Отправлено: 14:58, 04-06-2004 | #3


Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


hasherfrog
из мсдн:
_fdopen, _wfdopen
Associate a stream with a file that was previously opened for low-level I/O.
Не понял как его можно связать со строкой?


Еще в вндосе (вобщето это уже не С) есть фича файлмэпинг.
Грубо - говоря пишешь в память, на самом деле пишешь в файл.
А нужно наоборот. Пишешь в файл, на самом деле пишешь в память
Как это можно приспособить без создания файла - непонятно.
Файл создавать не хочу. Иначе бы вопроса небыло.

Отправлено: 03:27, 05-06-2004 | #4


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Цитата:
Не понял как его можно связать со строкой?
Ну, скажем так - строку запросто можно рассматривать как стрим. Обычно оттуда читают, но иногда и пишут. В QT это обычное дело.
Цитата:
Файл создавать не хочу
Дык, файла-то и не будет, он весь будет сплошная память.
Хотя если смотреть очень глубоко в недры ОС, Ч@рт его знает, что будет файлом а что памятью в каждый конкретный момент времени

Отправлено: 09:34, 07-06-2004 | #5


Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


hasherfrog
Если знаете как FILE связать со строкой приведите конкретный пример.
"Стримов" разных много.
И то что они легко перенаправляются - понятно.
Не понятно как конкретный тип (FILE*) перенаправить.

Отправлено: 03:05, 09-06-2004 | #6


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


bilytur
Нет у меня конкретного примера. Не писал я такого никогда. Не представляю, зачем это нужно.
Но примерно так:
Код: Выделить весь код
//временный файл - открываем через open, не fopen 
int fdMain = open("temp.tmp", O_CREAT | O_EXCL | O_TRUNC | O_RDWR); 
//копия для передачи в функцию 
FILE *fSubst = fdopen(fdMain, "w"); 
//предварительный буффер - не уверен, что он вообще нужен 
void *pTemp = malloc(1024); 
//А отсюда мы будем читать после возврата 
char * pMemory = (char *)mmap(pTemp, 1024, PROT_READ, MAP_PRIVATE, fdMain, 0); 
//теперь вызываем требуемую функцию 
FunctionName(fSubst, ...
Не совсем уверен в точном указании флагов (O_EXCL и MAP_PRIVATE)

Отправлено: 10:00, 09-06-2004 | #7


Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


hasherfrog
Спасибо за код.  Конкретные вещи всегда лучше "философствования"
Обязательно попробую. Хотя
Цитата:
open("temp.tmp",
несколько смущает...
В любом случае элегантного перенаправления FILE видимо нет, как с другими стримами. ( в MFC например)
Извиняюсь за некоторую назойливость.
Спасибо.

Отправлено: 03:31, 10-06-2004 | #8


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


bilytur
Я не сказал, но конечно, надо сделать [s]remove("temp.tmp";[/s] опосля работы.
Насчёт MFC - я не совсем понял; Вы хотите сказать, что там есть элегантная работа (?) с FILE? ЕМНИП, там всё больше CFile. Я когда-то нехило с этим намучился.

Отправлено: 09:42, 10-06-2004 | #9


Пользователь


Сообщения: 135
Благодарности: 0

Профиль | Отправить PM | Цитировать


hasherfrog
Да нет с FILE конечно же нет, но там кроме CFile есть
еще CArchiveStream, IStream (правда последний это уже ATL)
и они неплохо дополняют друг-друга. По крайней мере создать поток в памяти
как 2 пальца об асфальт.

Отправлено: 03:22, 11-06-2004 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » как FILE перенаправить в строку.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как перенаправить МОИ ДОКУМЕНТЫ на диск D??? BlackDragon Microsoft Windows 2000/XP 3 16-11-2012 22:14
CMD/BAT - [решено] как перенаправить на другой сайт при помощи bat файла user171078 Скриптовые языки администрирования Windows 1 19-01-2010 08:19
D-Link - Как перенаправить порты на D-Link DWL-2100AP klip-org Сетевое оборудование 0 19-01-2009 14:53
Интерфейс - Нужен твик -убрать в проводнике "Избранные ссылки", адресную строку и строку поиска Mishechka Microsoft Windows Vista 18 16-09-2008 16:19
как перенаправить на использование другого сквида? Alexir Программное обеспечение Linux и FreeBSD 5 14-03-2007 11:14




 
Переход