Как получить информацию об открытых файлах в xv6 относительно читаемых и конвейерных / обычных - PullRequest
0 голосов
/ 25 мая 2020

Я работаю над проектом, в котором мне нужно реализовать системный вызов, который распечатывает все файлы, открытые всеми процессами, но я не могу получить информацию для чтения и передачи по конвейеру / регулярно. Ниже мой код

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) {

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Что вы используете:

  • ptable: поскольку он является внутренним по отношению к proc.c, вам нужно поместить свой код в конец proc.c (или экспортировать его красиво)
  • struct file: вам нужно включить file.h, но этот файл сам зависит от fs.h (для NDIRECT) и sleeplock.h (для struct sleeplock).

Итак, вам нужно:

  • добавить

    #include "fs.h"
    #include "sleeplock.h"
    #include "file.h"
    

    перед lsof(void)

  • поместить весь этот код в конец proc.c
0 голосов
/ 25 мая 2020

Сообщение читается как ошибка компилятора. Добавьте строку в исходный файл, которая включает заголовок с определением файла структуры; например:

#include <linux/fs.h>
...