Я хочу реализовать системный вызов, где я передаю ссылку на структурную переменную, тогда я хотел бы отображать значения в том же файле.Как реализовать системный вызов с параметром структуры?
Например, у меня есть следующая структура.
struct procInfo{
int processID[64]; // the PID of each process
};
Допустим, системный вызов Я хочу осуществить это int getProcessIds(struct procInfo*)
и я называю его в файле с именем pcid.c
.
Я хочу, чтобы системный вызов захватил идентификаторы процессов из планировщика внутри файла proc.c
, чтобы я мог распечатать их в моем файле pcid.c
.
Я знаю, как создавать регулярные системные вызовы, у которых нет входных параметров. Я также знаю, как печатать идентификаторы процессов, используя этот системный вызов внутри файла proc.c
, однако я не знаю, как печатать их внутри файла pcid.c
. Я не понимаю, как указатель strucutre возвращается, поэтому я могу распечатать его внутри pcid.c
.
Я выполнил аналогичный системный вызов int fstat(int fd, struct stat*)
, но я не вижу, как возвращается указатель структуры.
Надеюсь, мой вопрос ясен, я использую операционную систему XV6, спасибо!
Обновлено
Я был в состоянии заставить его работать, мне не нужно использовать таНос для выделения памяти. Вот странная вещь, хотя, я добавил еще одну переменную в свою структуру, вот и вот что стало.
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
'malloc (sizeof (struct procInfo))'. Или вы можете просто выделить его в стеке (определите его без '*'), как это обычно используется для 'fstat'. – StenSoft
Вы так говорите? 'struct procInfo * procInfo = malloc (sizeof (struct procInfo));' Я не думаю, что это сработало! – Ammar