首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/C++中的简单虚拟文件系统

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

Stack Overflow用户
提问于 2009-09-01 09:50:20
回答 6查看 27.4K关注 0票数 9

我想实现一个非常简单的虚拟文件系统( VFS ),它支持一些基本的文件系统操作,如fwrite、fopen、fput等。VFS是一些具体操作系统(如Windows、Linux等)之上的抽象层。

代码语言:javascript
复制
FILE VFS_File_Open( const unsigned char* strFile, int flags );

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

代码语言:javascript
复制
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中找到类似的东西,例如,我会对系统调用来打开文件、编写文件等感兴趣。

另一个注意事项:Cstdio.h提供了一些站立IO操作,如

代码语言:javascript
复制
FILE * fopen (const char *filename, const char *opentype)

换句话说,我不必在我的VFS中重新实现fopen例程,因为Gnu C库关心它处理的是什么操作系统,对吗?我只需要实现stdio库不支持的功能,例如创建目录,这些目录因文件系统而异吗?

谢谢

EN

回答 6

Stack Overflow用户

发布于 2009-09-01 09:58:00

最简单/最干净的实现可能是创建两个单独的库,一个用于windows,另一个用于linux,而不使用级联的ifswitch语句。库将实现在公共标题中定义的相同功能。

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

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

编辑

如果你在使用C++,为什么不直接依赖呢?标准库已经提供了您要实现的功能,并且可以在所有平台上使用。

否则,这里有一个指向Windows文件管理功能的链接。

第二次编辑

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

票数 13
EN

Stack Overflow用户

发布于 2009-09-01 10:04:53

我认为您无法按照您想要的方式为不同的OSes编译一个模块。

代码语言:javascript
复制
// 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
}
票数 7
EN

Stack Overflow用户

发布于 2009-09-01 10:06:43

您可以尝试PhysicsFS库。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1361560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档