Как обрабатывать данные ОЗУ, как если бы это был настоящий файл? - PullRequest
6 голосов
/ 31 мая 2010

Итак, у меня есть некоторые временные данные в моей программе (в оперативной памяти). Я хочу как-то сделать так, чтобы это выглядело как файл (например, для отправки его в другую программу, которая принимает в качестве аргумента ссылку на файл)?

Возможно ли это?

Как это сделать?

Ответы [ 5 ]

15 голосов
/ 31 мая 2010

Почему бы просто не записать файл на диск? Если запись на диск выполняется слишком медленно, вы можете передать флаг FILE_ATTRIBUTE_TEMPORARY в CreateFile , чтобы сохранить данные в кэше (и избежать записи на физическое устройство).

Иногда очевидные решения являются лучшими ...

11 голосов
/ 31 мая 2010

Если поддерживается вашей операционной системой (Unixoid и Windows), вы можете попытаться использовать сопоставленные с памятью файлы .

1 голос
/ 31 мая 2010

Вы можете сделать это в C, используя функцию popen():

FILE *f = popen("program args", "w");
// write your output to f here using stdio
pclose(f);

Это возможно, если ваша внешняя программа считывает свои данные с stdin.

0 голосов
/ 31 мая 2010

Да, это возможно. Вы можете передавать свои данные в другое приложение с помощью механизма межпроцессного взаимодействия :

  1. В зависимости от вашей ОС у вас есть различные варианты здесь. Вы можете создать канал, как упоминали здесь другие авторы, поскольку во многих ОС есть каналы.
  2. Вы также можете использовать разделяемую память.
  3. Вы можете просто записать его в файл, а затем открыть этот файл в другом приложении.
  4. У многих ОС есть и другие методы, которые вы можете использовать.

РЕДАКТИРОВАТЬ: MSDN перечисляет все механизмы IPC, доступные для Windows здесь .

0 голосов
/ 31 мая 2010

Вы можете использовать pipe ()

The pipe() function shall create a pipe and place two file descriptors,
one each into the arguments fildes[0] and fildes[1], that refer to  the
open  file  descriptions for the read and write ends of the pipe. Their
integer values shall be the two lowest available at  the  time  of  the
pipe() call. The O_NONBLOCK and FD_CLOEXEC flags shall be clear on both
file descriptors. (The fcntl() function can be used to set  both  these
flags.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...