在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无法跟踪。
答案 0 :(得分:0)
我们看不到arg
的声明,但似乎是void* arg
,因此,您的代码应为:
argptr(1, (void*)&arg, sizeof(arg))
我不是语言律师,因此从语言标准的角度来看,我不知道sizeof(void)
是否有效,但是我使用的大多数C编译器都为此提供了1
。 C ++编译器通常会报告错误。无论如何,这不是您想要的,您想要sizeof(void*)