模拟文件指针C++?

Sat*_*own 2 c++ pointers file bitmap

我正在尝试从存档加载位图.我在位图类中使用了一个指向文件名的字符指针,然后在它位于同一目录中时加载它.位图加载类经过了很好的测试,我不想太乱用它.问题是它使用文件指针加载并执行其所有文件操作.有没有办法模拟文件指针,实际上是从内存中的块读取?

对不起,如果这是一个奇怪的问题.

Emm*_*dec 5

重构它并创建与以前完全相同的参数:如果你使用从磁盘读取的fopen,fread和fseek,则创建从内存中读取文件的mopen,mread和mseek.您只需要修复函数的名称.

它应该很容易没有风险,代码最终看起来不像是一个肮脏的黑客.


Ben*_*Ben 5

您也可以使用管道。管道是一块内存,您可以使用文件原语在其中读取和写入。这基本上就是你想要的

(假设 POSIX 操作系统)

创建一个管道:

int p[2]; 
pipe(p); 
Run Code Online (Sandbox Code Playgroud)

使用 fdopen() 将管道文件描述符转换为FILE*

FILE *emulated_file = fdopen(p[0], "r"); 
Run Code Online (Sandbox Code Playgroud)

然后将您想要的任何内容写入管道的写入端:

write(p[1], 17 ,"whatevereyouwant");
Run Code Online (Sandbox Code Playgroud)

现在 :

buf[32];
fread(&buf,1,32, emulated_file); 
cout<<buf<<endl;
Run Code Online (Sandbox Code Playgroud)

将输出“whateveryouwant”。