我想实现一个非常简单的虚拟文件系统( VFS ),它支持一些基本的文件系统操作,如fwrite、fopen、fput等。VFS是一些具体操作系统(如Windows、Linux等)之上的抽象层。
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中找到类似的东西,例如,我会对系统调用来打开文件、编写文件等感兴趣。
另一个注意事项:Cstdio.h提供了一些站立IO操作,如
FILE * fopen (const char *filename, const char *opentype)换句话说,我不必在我的VFS中重新实现fopen例程,因为Gnu C库关心它处理的是什么操作系统,对吗?我只需要实现stdio库不支持的功能,例如创建目录,这些目录因文件系统而异吗?
谢谢
发布于 2009-09-01 09:58:00
最简单/最干净的实现可能是创建两个单独的库,一个用于windows,另一个用于linux,而不使用级联的if和switch语句。库将实现在公共标题中定义的相同功能。
另外,请记住,检查OS == something中的代码将在所有系统上编译和链接,例如,在linux上编译的库应该能够解析windows系统调用.
我认为分离事物(不同的操作系统,不同的cpp文件)是最简单的解决方案。
编辑:
如果你在使用C++,为什么不直接依赖流呢?标准库已经提供了您要实现的功能,并且可以在所有平台上使用。
否则,这里有一个指向Windows文件管理功能的链接。
第二次编辑:
如果您想要一个跨平台的文件系统库,支持创建目录,您可以检查boost文件系统库。
发布于 2009-09-01 10:04:53
我认为您无法按照您想要的方式为不同的OSes编译一个模块。
// 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
}发布于 2009-09-01 10:06:43
您可以尝试PhysicsFS库。
https://stackoverflow.com/questions/1361560
复制相似问题