【发布时间】:2010-11-24 14:19:24
【问题描述】:
我想实现一个非常简单的虚拟文件系统(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 库不支持的功能,例如创建不同文件系统的目录?
谢谢
【问题讨论】:
-
您的问题不清楚是否需要为许多不同的文件系统(EXT2、FAT)进行虚拟文件系统切换,或者是否要在操作系统之间切换。
标签: c++ filesystems