Я хотел бы реализовать очень простую виртуальную файловую систему (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 предлагает ряд стандартных операций ввода-вывода, таких как
FILE * fopen (const char *filename, const char *opentype)
Другими словами, мне не нужно переопределять подпрограмму fopen в моей VFS, поскольку библиотека Gnu C позаботится о том, с какой ОС она работает, верно? Мне просто нужно реализовать функции, которые не поддерживаются библиотекой stdio, например. создание каталогов, которые отличаются от файловой системы к файловой системе?
Спасибо