【问题标题】:MINIX: sys_call: ipc mask denied SENDREC from 1 to 1MINIX: sys_call: ipc mask denied SENDREC from 1 to 1
【发布时间】:2016-05-23 17:08:19
【问题描述】:

MINIX 3.2.1 中,我想在 VFS 服务器中创建一个新的系统调用,它会被赋予一个文件名作为参数并打印这个特定文件的 inode号码。

所以为了通过文件名检索文件的 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

经过一番研究,我发现这可能是因为VFS服务器试图向自己发送消息,因为stat实际上是在VFS服务器内部实现的,所以ipc掩码拒绝了这个sendrec()调用。所以我必须编辑一些配置文件,以便为这种通信提供正确的权限。

但我不确定我的理解是否正确,也不知道应该编辑哪个文件以赋予适当的权限。所以,如果有人能在这个问题上启发我,我将不胜感激。

提前致谢。

【问题讨论】:

    标签: system-calls stat minix


    【解决方案1】:

    你理解正确。但解决方案不是继续“修复权限”,这只是为了防止自己在脚下开枪:它只会让系统更严重地崩溃。 相反,您需要执行VFS 在为STAT 请求提供服务时执行的步骤,从它破解消息后开始。

    【讨论】:

    • 好吧,我确实通过研究do_stat 的工作方式(在/usr/src/servers/vfs/stat.c 中)解决了这个问题。无论如何,感谢您指出。我后来在那个项目中遇到的另一个问题是VFS 无法访问inode 结构表,get_inode 之类的函数也不能访问,因为它们都是在MFS 服务器内部实现的,而不是VFS。所以我必须在MFS 内部创建一个新的系统调用,我从VFS 内部调用它。为了正确创建对MFS 服务器的系统调用,此处提供了一些信息:manio.org/blog/how-to-add-new-system-calls-to-minix-3-1-8
    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2018-07-25
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多