当前位置:  开发笔记 > 编程语言 > 正文

C/C++中的简单虚拟文件系统

如何解决《C/C++中的简单虚拟文件系统》经验,为你挑选了3个好方法。

我想实现一个非常简单的虚拟文件系统(VFS),它支持一些基本的文件系统操作,如fwrite,fopen,fput等.VFS是一些具体操作系统之上的抽象层,例如Windows,Linux等.现在假设,fopen界面看起来像这样

FILE VFS_File_Open( const unsigned char* strFile, int flags );

现在我想知道如何在这个接口的实际实现中区分我正在与之交谈的文件系统.是否有C语言告诉我应用程序正在运行哪个操作系统,以便我可以这样做:

FILE VFS_File_Open( const unsigned char strFile, int flags )
{
int OS = getOSID();

if (0S == 1)
  //implement here the system calls required to open a file on a WIN OS
else if (OS == 2)
  //implement here the system calls required to open a file on a Linux OS
etc  
}

编辑:

现在我想知道是否有人知道我在哪里可以找到系统调用Windows的文件操作?很容易找到它们用于Linux,但我很难找到类似于Windows的东西,例如我会对打开文件,写文件等系统调用感兴趣.

另一方面:C stdio.h提供了许多支持IO操作,如

FILE * fopen (const char *filename, const char *opentype)

换句话说,我不需要在我的VFS中重新实现fopen例程,因为Gnu C库负责处理它正在处理的操作系统,是吗?我只需要实现stdio库不支持的功能,例如创建不同于文件系统到文件系统的目录?

谢谢



1> Paolo Tedesc..:

也许最简单的/清洁的实施方法是,创建两个单独的库,一个用于Windows,一个用于Linux,而不级联乱抛垃圾代码ifswitch语句.这些库将实现在公共头中定义的相同功能.

另外,请记住,检查中的代码OS == something将在所有系统上编译和链接,因此例如在linux上编译的库应该能够解析Windows系统调用...

我认为分离事物(不同的操作系统,不同的cpp文件)是最简单的解决方案.

编辑:

如果您使用的是C++,为什么不依靠流?标准库已经提供了您尝试实现的功能,并且可在所有平台上使用.
否则,这是Windows文件管理功能的链接.

第二次编辑:

如果您想要一个跨平台的文件系统库,支持其他目录创建,您可以检查boost文件系统库.



2> Nick Dandoul..:

我不认为你可以按照你想要的方式为不同的操作系统编译模块.

// Make the distinction at compile time,

FILE VFS_File_Open( const unsigned char strFile, int flags )
{
#ifdef _WINDOWS
    //implement here the system calls required to open a file on a WIN OS
#endif
#ifdef _LINUX
    //implement here the system calls required to open a file on a Linux OS
#endif
    etc
}


当然,如果要将所有内容保存在单个文件中,则必须在编译时(+1)进行区分.我仍然认为分离的东西更好.
是的我同意.实际上,这是设计跨平台项目的常见*模式*.

3> Eugene Bujak..:

你可以试试PhysicsFS库.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有