Operating system 从函数中调用minix\u syscall()

Operating system 从函数中调用minix\u syscall(),operating-system,system-calls,minix,Operating System,System Calls,Minix,我最近在minix中遇到了一个非常奇怪的问题,与我编写的一个系统调用有关。基本上,代码在main()函数中可以正常运行,调用完成了它应该做的事情。但是,如果我将代码放入一个函数中,并从main()中调用该函数,它将失败。以下是一个例子: void do_foo() { message m; _syscall(FS_PROC_NR, FOO, &m); } int main(int argc, char* argv[]) { /* works */ mes

我最近在minix中遇到了一个非常奇怪的问题,与我编写的一个系统调用有关。基本上,代码在main()函数中可以正常运行,调用完成了它应该做的事情。但是,如果我将代码放入一个函数中,并从main()中调用该函数,它将失败。以下是一个例子:

void do_foo()
{
    message m;
    _syscall(FS_PROC_NR, FOO, &m);
}

int main(int argc, char* argv[])
{
    /* works */
    message m;
    _syscall(FS_PROC_NR, FOO, &m);

    /* does not work */
    do_foo();
}

如果您从代码中调用一个函数,它应该做与您在主函数中编写代码相同的事情。我在这里遗漏了什么???

在操作完成之前,特定的系统调用是否返回?如果是这样,那么当
do_foo()
返回时,
m
将被销毁,并且该操作可能会覆盖堆栈,认为
m
仍然存在,或者从堆栈中获取垃圾,认为是相同的。或者您可能输入了错误大小的
m
。我认为可能是这样的,但实际上这与我的系统调用位于/usr/src/servers/vfs中有关,并且我没有正确地在消息中加载带有fetch\u name的字符串指针,而是试图直接将指针传递给字符串。仍然不知道为什么这两个不同,但使用fetch_名称似乎可以解决这个问题