我想实现一个系统调用,其中我传递了一个对结构变量的引用,然后我想在相同的文件中显示这些值。如何实现具有结构参数的系统调用?
例如我有以下结构。
struct procInfo{
int processID[64]; // the PID of each process
};
比方说,系统调用我想要实现是int getProcessIds(struct procInfo*)
,我把它称为pcid.c
文件中。
我希望系统调用从proc.c
文件内的调度程序中获取进程ID,以便我可以在我的pcid.c
文件中打印它们。
我知道如何创建没有输入参数的常规系统调用。我也知道如何在proc.c
文件中使用此系统调用来打印进程ID,但是我不知道如何在pcid.c
文件中打印它们。我不明白结构指针是如何返回的,所以我可以在pcid.c
中打印它。
我跟着一个类似的系统调用int fstat(int fd, struct stat*)
但我看不到结构指针是如何返回的。
我希望我的问题很清楚,我使用的是XV6操作系统,谢谢!
更新
我能得到它的工作,我也没必要使用malloc分配内存。尽管这是一件奇怪的事情,但我在结构中添加了另一个变量,所以它就变成了这样。
struct procInfo{
int processID[64]; // the PID of each process
char processname[64][16] // the name of each process
};
系统调用proc.c
文件后,这里是我如何打印值。
printf(1,"Name = %s\n" ,procInfo->processname[0]);
printf(1,"PID = %d\n" , procInfo->processID[0]);
但奇怪的是,我得到的trap 14 err 4 on cpu 1 eip 0x510 addr 0x7417ba08--kill proc
,但是我试着打印只有一个值和它的工作。
printf(1,"Name = %s\n" ,procInfo->processname[0]);
//printf(1,"PID = %d\n" , procInfo->processID[0]);
或者
//printf(1,"Name = %s\n" ,procInfo->processname[0]);
printf(1,"PID = %d\n" , procInfo->processID[0]);
时,我只打印其中的一个为什么工作?我打印正确吗?
,所以如果我声明如下'结构procInfo * procInfo;',我在进行系统调用之前如何为它分配内存?现在我进行系统调用,但是我没有为结构分配任何内存。 – Ammar 2015-02-11 02:38:36
'malloc(sizeof(struct procInfo))''。或者,您可以像堆栈中常用的那样将它分配到堆栈上(不使用'*'来定义它)。 – StenSoft 2015-02-11 02:39:59
你是这样说的吗? 'struct procInfo * procInfo = malloc(sizeof(struct procInfo));'我不认为它的工作! – Ammar 2015-02-11 02:45:43