2016-05-23 7 views
2

В MINIX 3.2.1, я хочу, чтобы создать новый системный вызов в сервере VFS, который будет дано имя файла в качестве параметра и будет печатать этот определенный файл inode number.MINIX: sys_call: маска IPC отказано SENDREC от 1 до 1

Так что для того, чтобы retieve индексный дескриптор файла по его имени я хочу использовать в системе по умолчанию вызов на:

int stat(char *name,struct stat *buffer)

http://minix1.woodhull.com/manpages/man2/stat.2.html

в теле моего нового обработчика системного вызова, который является

int mycall_1(void); внутри /usr/src/servers/vfs/misc.c

Но когда я проверить новый системный вызов, в точке, где stat системный вызов должен быть вызван, он на самом деле не будет, а вместо этого он печатая сообщение:

sys_call: ipc mask denied SENDREC from 1 to 1

Afer некоторых исследований я обнаружил, что возможно, это происходит из-за того, что сервер VFS пытается отправить сообщение самому себе, так как stat фактически реализован внутри сервера VFS, и поэтому ipc-маска отрицает этот вызов sendrec(). Поэтому я должен отредактировать некоторый файл конфигурации, чтобы дать правильное разрешение для этого сообщения.

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

Заранее спасибо.

ответ

1

Вы поняли это правильно. Но решение заключается не в том, чтобы продолжать «исправление разрешений», которые здесь только для того, чтобы предотвратить выстрел себе в ногу: это только позволит системе более плохо бронуться. Скорее вам необходимо выполнить шаги, которые VFS делать, когда он обслуживает запрос STAT, начиная с его взлома сообщения.

+0

Ну, я действительно решил эту проблему, изучив способ работы do_stat (внутри /usr/src/servers/vfs/stat.c). Спасибо, что все равно указали. Еще одна проблема, с которой я столкнулся позже в этом проекте, заключалась в том, что 'VFS' не может получить доступ к таблице' inode' struct, ни fuctions, как 'get_inode', потому что они все реализованы внутри' MFS', а не 'VFS'. Поэтому мне пришлось создать новый системный вызов внутри 'MFS', который я вызывал изнутри' VFS'. Некоторая информация для создания системного вызова на сервере «MFS» приведена здесь: http://www.manio.org/blog/how-to-add-new-system-calls-to-minix-3-1 -8 / –