MINIX: sys_call: ipc mask denied SENDREC from 1 to 1
MINIX: sys_call: ipc mask denied SENDREC from 1 to 1
在 MINIX 3.2.1 中,我想在 VFS 服务器中创建一个新的 系统调用,它将被赋予一个文件名作为参数并将打印此特定文件的 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 mask 拒绝了这个 sendrec()
称呼。所以我必须编辑一些配置文件,以便为这种通信提供正确的权限。
但我不确定我的理解是否正确,也不知道应该编辑哪个文件以授予适当的权限。所以,如果有人能在这个问题上启发我,我将不胜感激。
提前致谢。
你没看错。但解决方案是不要继续 "fixing the permissions",这里只是为了防止搬起石头砸自己的脚:这只会让系统更加崩溃。
相反,您需要执行 VFS
在为 STAT
请求提供服务时执行的步骤,从破解消息后开始。
在 MINIX 3.2.1 中,我想在 VFS 服务器中创建一个新的 系统调用,它将被赋予一个文件名作为参数并将打印此特定文件的 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 mask 拒绝了这个 sendrec()
称呼。所以我必须编辑一些配置文件,以便为这种通信提供正确的权限。
但我不确定我的理解是否正确,也不知道应该编辑哪个文件以授予适当的权限。所以,如果有人能在这个问题上启发我,我将不胜感激。
提前致谢。
你没看错。但解决方案是不要继续 "fixing the permissions",这里只是为了防止搬起石头砸自己的脚:这只会让系统更加崩溃。
相反,您需要执行 VFS
在为 STAT
请求提供服务时执行的步骤,从破解消息后开始。