我想實現一個系統調用,其中我傳遞了一個對結構變量的引用,然後我想在相同的文件中顯示這些值。如何實現具有結構參數的系統調用?
例如我有以下結構。
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