Я хочу реализовать системный вызов, в котором я передаю ссылку на структурную переменную, а затем хочу отображать значения в том же файле.
Например, у меня есть следующая структура.
struct procInfo{
int processID[64]; // the PID of each process
};
Допустим, я хочу реализовать системный вызов int getProcessIds(struct procInfo*)
, и я вызываю его внутри файла с именем pcid.c
.
Я хочу, чтобы системный вызов получал идентификаторы процессов из планировщика внутри файла proc.c
, чтобы я мог распечатать их в своем файле pcid.c
.
Я знаю, как создавать обычные системные вызовы без входных параметров. Я также знаю, как распечатать идентификаторы процессов с помощью этого системного вызова внутри файла 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
, однако я пытался напечатать только одно значение, и это сработало.
printf(1,"Name = %s\n" ,procInfo->processname[0]);
//printf(1,"PID = %d\n" , procInfo->processID[0] );
Or
//printf(1,"Name = %s\n" ,procInfo->processname[0]);
printf(1,"PID = %d\n" , procInfo->processID[0] );
Почему это сработало, когда я напечатал только один из них? Я правильно печатаю?