構造体変数への参照を渡すシステム コールを実装し、同じファイルに値を表示したいと考えています。
たとえば、次の構造があります。
struct procInfo{
int processID[64]; // the PID of each process
};
実装したいシステムコールがint getProcessIds(struct procInfo*)
であり、 というファイル内で呼び出すとしましょうpcid.c
。
システムコールでファイル内のスケジューラからプロセス ID を取得してproc.c
、ファイル内に出力できるようにしpcid.c
ます。
入力パラメーターを持たない通常のシステム コールを作成する方法を知っています。ファイル内でこのシステム コールを使用してプロセス ID を出力する方法も知っていproc.c
ますが、ファイル内でそれらを出力する方法がわかりません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
、値を 1 つだけ出力してみましたが、うまくいきました。
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] );
そのうちの 1 つだけを印刷したときに機能したのはなぜですか? 正しく印刷されていますか?