Особенности работы с файловыми системами

Функциональность для работы с файловыми системами доступна прикладным программам через функции POSIX и другие функции стандартной библиотеки языка C.

Ограничения поддержки и особенности реализации POSIX описаны в следующих разделах:

В KasperskyOS реализация некоторых функций стандартной библиотеки языка C для работы с файловой системой отличается от реализации этих функций в Linux и других UNIX-подобных операционных системах. Сведения об этих функциях приведены в таблице ниже.

Функции стандартной библиотеки языка C для работы с файловой системой с особенностями реализации

Функция

Назначение

Особенности реализации

Заголовочный файл

mount()

Монтировать файловую систему.

При запуске системной программы VFS в качестве корня файловой системы '/' автоматически монтируется RAMFS. После старта VFS допускается однократное перемонтирование корня файловой системы на любую другую если в RAMFS отсутствуют открытые файлы, при этом содержимое RAMFS будет освобождено.

Вследствие того, что инициализация блочного уровня происходит асинхронно с работой VFS, перед монтированием блочного устройства необходимо проверить его готовность. При попытке монтирования блочного устройства, которое еще не зарегистрировано в драйвере блочного устройства, функция mount() вернет ошибку ENODEV.

Получить список доступных к монтированию устройств можно с помощью виртуальной файловой системы devfs, для этого нужно смонтировать devfs в каталог /dev и вывести список доступных устройств через readdir() в директории монтирования devfs.

Подробнее см. "Функции монтирования файловых систем".

sys/mount.h

umount()

Размонтировать файловую систему.

При выполнении функции umount() VFS проверяет, что нет открытых файлов (файловых дескрипторов) в поддереве размонтируемой файловой системы.

Так как события о закрытии файла могут приходить в VFS асинхронно, то при наличии открытых файлов на размонтируемой файловой системе, VFS выполняет повторные попытки размонтирования в течение таймаута попыток (по умолчанию 1 секунда), после чего возвращает в вызывающий процесс ошибку EBUSY.

Подробнее см. "Функции монтирования файловых систем".

sys/mount.h

sync()

Записать кэши файловой системы на диск.

Функция не реализована. При вызове sync() ничего не происходит, так как по POSIX вызов sync() не может вернуть ошибку.

unistd.h

fsync()

Синхронизировать изменения в файле с дисковым устройством.

Работает, если вызов поддержан в файловой системе где открыт файл, иначе выдаст ошибку ENOSYS.

unistd.h

fdatasync()

Синхронизировать изменения в файле с дисковым устройством.

Работает, если вызов поддержан в файловой системе где открыт файл, иначе выдаст ошибку ENOSYS.

unistd.h

open()

Открыть файл.

Недопустимо использование флага O_CREAT, без явного указания параметра mode.

fcntl.h

В начало