заблокировать файл или раздел для чтения и записи системных вызовов - PullRequest
0 голосов
/ 07 октября 2011

Мне нужно знать, как написать системный вызов, который блокирует (блокирует) и разблокирует (разблокирует) архив (inode) или раздел (super_block) для функций чтения и записи.

Пример: эти функциинаходятся в fs.h lock_super (struct super_block *);
unlock_super (struct super_block *);

Как получить супер_блок (/ dev / sda1например)?

1 Ответ

2 голосов
/ 08 октября 2011

Вызовы lock_super и unlock_super не предназначены для непосредственного управления процессами уровня пользователя.Он вызывается только уровнем VFS, когда пользовательский процесс вызывает операцию (операцию над inode) в файловой системе.Если вы все еще хотите это сделать, вы должны написать свой собственный драйвер устройства и предоставить желаемую функциональность (блокировка разблокировки inode) на уровне пользователя.

Нет текущих системных вызовов, которые позволили бы вамзаблокировать, разблокировать иноды.Есть много причин, по которым нецелесообразно внедрять новый системный вызов без должного рассмотрения.Но если вы хотите это сделать, вам нужно написать обработчик вашего собственного системного вызова в ядре.Кажется, вам нужен точный контроль над файловой системой, возможно, вы реализуете файловую систему на уровне пользователя.

Для ответа на вопрос о том, как получить super_block, каждый модуль файловой системы регистрируется с помощьюVFS (виртуальная файловая система).VFS действует как промежуточный уровень между пользователем и реальной файловой системой.Таким образом, именно VFS знает об указателях функций на методы lock_super и unlock_super.Суперблок VFS содержит «информацию об устройстве» и «набор указателей на суперблок файловой системы».Вы можете получить эти указатели отсюда и позвонить им.Но помните, потому что фактическая файловая система управляется VFS, вы могли бы повредить данные.

...