C ';取消引用指向不完整类型的指针';在编译FreeBSD时,自定义系统调用

C ';取消引用指向不完整类型的指针';在编译FreeBSD时,自定义系统调用,c,compiler-errors,C,Compiler Errors,编译此代码时出现编译错误: #include <sys/param.h> #include <sys/system.h> struct syshello_args { char *buf; }; int sys_myhello(p, uap) struct proc* p; struct syshello_args* uap; { sprintf(uap->buf, "Hello"); p->p_retval[0]=0; ret

编译此代码时出现编译错误:

#include <sys/param.h> 
#include <sys/system.h>

struct syshello_args 
{
   char *buf;
};

int sys_myhello(p, uap)
struct proc* p; struct syshello_args* uap;
{
   sprintf(uap->buf, "Hello");
   p->p_retval[0]=0;
   return 0;
}
#包括
#包括
结构syshello\u参数
{
char*buf;
};
int sys_myhello(p,uap)
结构程序*p;结构syshello_args*uap;
{
sprintf(uap->buf,“你好”);
p->p_retval[0]=0;
返回0;
}
我犯了很多错误:

我对C语言一点也不熟悉。我在几个教程中找到了这个例子,但是 这对我不起作用。有人能帮我纠正这个错误吗


谢谢你

我觉得你的教程很奇怪。试着再找一个。至少,struct syshello_args中的buf在任何地方都找不到(在您的示例中没有malloc)。其次,在结束大括号后编写参数类型是一种非常古老的方法。而且,在我看来,用系统调用开始C不是一个好主意。它们是!这只是系统调用的实现,系统调用被假定为打印消息。是给freeBSD 4的。2@JIghtuse:
p
uap
sys_myhello
的参数;调用方应已传入有效值。这是一个老式的函数定义;现代的等价物是
int sys\u myhello(struct proc*p,struct syshello\u args*uap){…}
Yes,但我不能在FreeBSD 4.2中使用它。