我想实现一个系统调用,在其中传递对结构变量的引用,然后我想在同一个文件中显示这些值。
例如我有以下结构。
struct procInfo{
int processID[64]; // the PID of each process
};
假设我要实现的系统调用是int getProcessIds(struct procInfo*)
,我在一个名为pcid.c
.
我希望系统调用从proc.c
文件内部的调度程序中获取进程 ID,以便我可以在文件中打印它们pcid.c
。
我知道如何创建没有输入参数的常规系统调用。我也知道如何在文件中使用这个系统调用来打印进程 ID proc.c
,但是我不知道如何在pcid.c
文件中打印它们。我不明白 strucutre 指针是如何返回的,所以我可以在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] );
为什么当我只打印其中一个时它会起作用?我打印正确吗?