2016-05-23 75 views
2

MINIX 3.2.1,我想創建一個新的系統調用在VFS服務器將被賦予一個文件名作爲參數,將打印此一定文件的inode號碼。MINIX:sys_call:IPC面膜否認SENDREC從1到1

因此,爲了通過它的名字retieve文件的inode的我要使用默認的系統調用:

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'結構表,既不是'get_inode',因爲它們都是在'MFS'服務器內部實現的,而不是'VFS'。所以我不得不在'MFS'內創建一個新的系統調用,我從'VFS'的內部調用。爲了創建一個系統調用正確的'MFS'服務器的一些信息在這裏提供:http://www.manio.org/blog/how-to-add-new-system-calls-to-minix-3-1 -8 / –