如何将流内容与文件名关联,而不实际将内容写入磁盘?

时间:2015-05-13 19:27:37

标签: c++ linux gzip pcap

我有一个读取少数类型文件的界面。界面具有readopen方法(以及更多)。 open收到文件名(const char *)并打开文件进行读取。目前我支持两种文件类型,pcap和raw binary。最近我发现我想要读取的所有文件实际上是压缩的(以gzip格式),但除此之外所有文件保持不变(在解压缩文件后,一切按设计工作)。我想添加open方法解压缩功能,因此首先将文件解压缩(在内存中,不将解压缩的内容写入磁盘)并将解压缩的内容传递给实际的实现。主要问题是open实现需要文件名,在pcap的情况下,open实现调用pcap_open_offline没有接收流或缓冲区。理想情况下,我可以创建某种文件(管道,链接或其他),并将其与我从压缩文件中提取的内容相关联。不知道怎么办呢?这里有一些代码可以让我更容易理解我在做什么

class FileReader //interface
{
public:
 void open(const char* name)
 {
  // unzip file here
  open_impl(name);
 }
 virtual size_t read() = 0;
protected:
 virtual void open_impl(const char* name) = 0;
};

class PcapReader: public FileReader
{
public:
 size_t read() {...}
protected:
 virtual void open_impl(const char* name)
 {
   pcap_open_offline(name, error_buffer);
 }
 char error_buffer[1024];
};

0 个答案:

没有答案