如何接收(void *)0x12345678参数?

时间:2019-04-10 20:54:28

标签: c unix xv6

在test.c(用户级别)

tid = thread_create(thread, (void *)0x12345678, stack);

我想接收上述thread_create函数的参数。所以,我在sysproc.c(内核级别)中编写了代码

if(argptr(0, (void*)&function, sizeof(*function)) ||
   argptr(1, (void*)&arg, sizeof(*arg)) ||
   argptr(2, (void*)&stack, sizeof(*stack)))
    return -1;

但是,仅第二行导致错误。如何更改此部分的代码?

  

argptr(1,(void *)&arg,sizeof(* arg))

我正在使用xv6操作系统,并且原始定义的功能是

int thread_create(void *(*function)(void*), void *arg, void *stack);

和test.c无法跟踪。

1 个答案:

答案 0 :(得分:0)

我们看不到arg的声明,但似乎是void* arg,因此,您的代码应为:

argptr(1, (void*)&arg, sizeof(arg))

我不是语言律师,因此从语言标准的角度来看,我不知道sizeof(void)是否有效,但是我使用的大多数C编译器都为此提供了1。 C ++编译器通常会报告错误。无论如何,这不是您想要的,您想要sizeof(void*)