Я работаю над проектом, в котором мне нужно реализовать системный вызов, который распечатывает все файлы, открытые всеми процессами, но я не могу получить информацию для чтения и передачи по конвейеру / регулярно. Ниже мой код
int
lsof(void)
{
struct proc *p;
sti();
acquire(&ptable.lock);
cprintf("name \t pid \t type \t read|write \n");
struct file* fp;
int readable = 0;
int piped = 0;
for (p=ptable.proc; p<&ptable.proc[NPROC]; p++){
readable = 0;
piped = 0;
fp = (struct file*) &p->ofile;
if(fp->readable){
readable = 1;
}
if(fp->type == 1){
piped = 1;
}
if(readable == 1 && piped == 1){
cprintf("%s \t %d \t piped \t R \n", p->name, p->pid);
}
else if(readable == 0 && piped == 1){
cprintf("%s \t %d \t piped \t W \n", p->name, p->pid);
}
else if(readable == 1 && piped == 0){
cprintf("%s \t %d \t regular \t R \n", p->name, p->pid);
}
else if(readable == 0 && piped == 0){
cprintf("%s \t %d \t regular \t W \n", p->name, p->pid);
}
}
release (&ptable.lock);
return 1;
}
. Я получаю сообщение об ошибке: разыменовывает указатель на неполный тип 'struct file' if (fp-> readable) {