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

Функция mount()

Функция mount() предназначена для монтирования файловых систем. При использовании этой функции в KasperskyOS важно учитывать следующие особенности её реализации:

В KasperskyOS работа с файловыми системами и сетью выполняется через отдельную системную программу, реализующую виртуальную файловую систему (англ. Virtual File System, VFS). По умолчанию программе VFS не сопоставляется программа, реализующая блочное устройство. Чтобы связать процесс используемой виртуальной файловой системы с требуемым блочным устройством, необходимо в файле CMakeLists.txt для сборки программы Einit использовать свойство blkdev::entity_REPLACEMENT функции set_target_properties. Возможные значения для свойства blkdev::entity_REPLACEMENT (реализации блочных устройств):

Функция mount() объявлена в заголовочном файле sysroot-*-kos/include/sys/mount.h из состава KasperskyOS SDK:

int mount(const char *source, const char *target,

const char *filesystemtype, unsigned long mountflags,

const void *data);

Параметры функции:

В случае успеха функция возвращает 0, иначе возвращает -1. Если произошла ошибка, переменная errno устанавливается в значение, указывающее на причину ошибки. Возможные значения errno соответствуют стандартным значениям, определённым в библиотеке libc.

Функция umount()

Функция предназначена для размонтирования файловых систем и объявлена в заголовочном файле sysroot-*-kos/include/sys/mount.h из состава KasperskyOS SDK:

int umount(const char *target);

Параметры функции:

В случае успеха функция возвращает 0, иначе возвращает -1. Если произошла ошибка, переменная errno устанавливается в значение, указывающее на причину ошибки. Возможные значения errno соответствуют стандартным значениям, определённым в библиотеке libc.

Пример вызова функций:

#include <sys/mount.h>

int main(void)

{

// Создать директорию /c с указанием

// прав доступа для всех пользователей

if (mkdir("/c", S_IRWXU | S_IRWXG | S_IRWXO)) {

fprintf(stderr, "Failed to create dir\n");

return -1;

}

// Смонтировать файловую систему ext2 с блочного устройства Ahci0Port0,0

// в директорию /c с использованием стандартных флагов монтирования

// и без дополнительных данных

if (mount("Ahci0Port0,0", "/c", "ext2", 0, "")) {

fprintf(stderr, "Failed to mount 'ext2'\n");

return -1;

}

// Создать директорию /c/ram с указанием

// прав доступа для всех пользователей

if (mkdir("/c/ram", S_IRWXU | S_IRWXG | S_IRWXO) != 0)

{

printf("Failed to create \"/c/ram\" dir\n");

return EXIT_FAILURE;

}

// Смонтировать файловую систему ramfs в директорию /c/ram

// с использованием стандартных флагов монтирования

// и без дополнительных данных

if (mount("nodev", "/c/ram", "ramfs", 0, "") != 0)

{

printf("Failed to mount ramfs, /c/ram (error %d: \"%s\")\n",

errno,

strerror(errno));

return EXIT_FAILURE;

}

// ...

// Размонтировать файловую систему из директории /c/ram

if (umount("/c/ram")) {

fprintf(stderr, "Failed to umount 'ramfs'\n");

return -1;

}

return 0;

}

Другие способы монтирования файловых систем см. в разделе "Монтирование файловых систем при запуске VFS".

В начало