如何在 xv6 中获取有关可读和 piped/regular 的已打开文件的信息
How to get information of opened files in xv6 regarding readable and piped/regular
我正在做一个项目,我需要实现一个系统调用来打印所有进程打开的所有文件,但我无法获得可读和 piped/regular 的信息。下面是我的代码
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;
}
我收到 取消引用指向不完整类型“结构文件”的指针的错误
如果(fp->可读){
帖子看起来像是编译器错误。在源文件中添加一行,其中包含带有结构文件定义的 header;例如:
#include <linux/fs.h>
你用什么:
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
的末尾
我正在做一个项目,我需要实现一个系统调用来打印所有进程打开的所有文件,但我无法获得可读和 piped/regular 的信息。下面是我的代码
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;
}
我收到 取消引用指向不完整类型“结构文件”的指针的错误 如果(fp->可读){
帖子看起来像是编译器错误。在源文件中添加一行,其中包含带有结构文件定义的 header;例如:
#include <linux/fs.h>
你用什么:
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
的末尾