![]() |
Есть некая функция в одной либе.
прототип вроде этого: int FunctionName(FILE *STREAM, ... ); Возможно-ли и если да то как сделать чтобы она выводила в память а не файл. Нужно чтобы типа sprintf работала. |
Может, вместо fopen использовать fdopen? А с потоком уже работать...
|
LДа, ещё вспомнил - посмотрите man mmap
|
hasherfrog
из мсдн: _fdopen, _wfdopen Associate a stream with a file that was previously opened for low-level I/O. Не понял как его можно связать со строкой? Еще в вндосе (вобщето это уже не С) есть фича файлмэпинг. Грубо - говоря пишешь в память, на самом деле пишешь в файл. А нужно наоборот. Пишешь в файл, на самом деле пишешь в память :) Как это можно приспособить без создания файла - непонятно. Файл создавать не хочу. Иначе бы вопроса небыло. |
Цитата:
Цитата:
Хотя если смотреть очень глубоко в недры ОС, Ч@рт его знает, что будет файлом а что памятью в каждый конкретный момент времени |
hasherfrog
Если знаете как FILE связать со строкой приведите конкретный пример. "Стримов" разных много. И то что они легко перенаправляются - понятно. Не понятно как конкретный тип (FILE*) перенаправить. |
bilytur
Нет у меня конкретного примера. Не писал я такого никогда. Не представляю, зачем это нужно. Но примерно так: Код:
//временный файл - открываем через open, не fopen |
hasherfrog
Спасибо за код. Конкретные вещи всегда лучше "философствования" Обязательно попробую. Хотя Цитата:
В любом случае элегантного перенаправления FILE видимо нет, как с другими стримами. ( в MFC например) Извиняюсь за некоторую назойливость. :) Спасибо. |
bilytur
Я не сказал, но конечно, надо сделать [s]remove("temp.tmp");[/s] опосля работы. Насчёт MFC - я не совсем понял; Вы хотите сказать, что там есть элегантная работа (?) с FILE? ЕМНИП, там всё больше CFile. Я когда-то нехило с этим намучился. |
hasherfrog
Да нет с FILE конечно же нет, но там кроме CFile есть еще CArchiveStream, IStream (правда последний это уже ATL) и они неплохо дополняют друг-друга. По крайней мере создать поток в памяти как 2 пальца об асфальт. :) |
Время: 18:22. |
Время: 18:22.
© OSzone.net 2001-