在xv6中创建新的系统调用,该调用返回有关所有正在运行的进程的打开文件的数据

问题描述 投票:0回答:1

开始学习xv6。我正在尝试添加一个新的系统调用,该调用将为所有正在运行的进程打印打开文件的列表。如果文件是常规文件或管道文件,并且文件可读性可写,则它必须打印每个进程的pid,其文件描述符号(每个pid分别为0,1,2-)。

所以我知道如何获取pid。这是一个代码示例:

struct proc *p;
    sti();
    acquire(&ptable.lock);
    cprintf("name \t pid \t type \t \n");
    for (p=ptable.proc; p<&ptable.proc[NPROC]; p++){
        cprintf("%s \t %d  \n", p->name, p->pid);
        }
    }
    release (&ptable.lock);

我不知道并且在互联网上找不到的是如何检查由文件描述符命名的文件是否可写,可擦写,都可写而且我不知道如何检查由文件描述符命名的文件的类型是否为pipe \ regular。

我看过file.h,其中有type(FD_NONE,FD_PIPE,FD_INODE),char readable,char writable之类的字段。但是我不明白如何得到他们...

[如果您有任何带有字幕信息的资源可以与我分享,或者可以提供帮助,我很高兴听到您的声音。非常感谢!

system-calls xv6
1个回答
1
投票

退房

  • [struct proc中的proc.h
  • file.c中的功能

您应该能够像这样打开文件数组开头的指针:

struct file* fp = p->ofile;

[从那里,您可以从ptable循环中复制相同的语法来循环遍历文件。要检查文件是否可读,请使用file.c中的功能检查可读标志:

if(fp->readable && fp->type == FD_PIPE)
 // do some logic
© www.soinside.com 2019 - 2024. All rights reserved.