当涉及到结构时,关于指针有很多问题,但我在这里做的是更复杂一点,让我难以置信。指针内指针的指针
我有一个用于xv6的proc结构。我试图实现mmap,其中'eager_mmap'采用fd和0,'lazy_mmap'采用1。
在这个proc结构中,我声明了一个结构数组,它将包含该进程中的所有mmaped文件。
struct proc {
struct proc_mmap mapped_files[NOFILE];
....
};
的结构在这里被定义为:每mmaped区域,我需要知道哪些地址是开始于IS和能够访问该区域的大小。
struct proc_mmap
{
int address;
struct file *fsize;
};
好的,现在是复杂的部分。我可以通过file.h访问该区域。具体来说,如果我通过下面列出的文件结构,然后是inode结构,那么我可以得到位于struct inode中的mmaped区域的大小。
struct file {
...
struct inode *ip;
};
和
struct inode {
...
uint size;
};
好,现在当我尝试访问该变量不喜欢这样的急切映射(其中s是阵列中的索引),
uint sz = proc->mapped_files[s].fsize->ip->size;
编译器告诉我成员'ip'的请求不是指针或联合中的东西。但我认为左边是一个指针......我不知道我在做什么错误,尽管我已经尝试了很多方法来解决这个问题(最后一行代码是最新的代码)。
我真的很感谢帮助,但更重要的是对我做错了什么的解释。谢谢!
编辑:
struct proc_mmap {
int addr;
struct file *fsize; };
struct proc {
int proc_mmap mapped_files[30]; // was NOFILE
};
// next two structs are in another header file
struct file {
struct inode *ip;
}
struct inode {
int size;
}
int main()
{
struct proc process;
// assume on first page table
int s = process-> mapped_files[0].fsize->ip->size;
return 0;
}
'proc'是指向'proc'类型结构的指针? – Vagish 2015-02-12 04:59:27
结构声明后应该有';'。这是你的编译器告诉你的唯一错误吗? – justanothercoder 2015-02-12 04:59:51
哦!不,不,那些实际上在代码中。我只是没有把它们放在这里,我编辑。 – 2015-02-12 05:01:27