當涉及到結構時,關於指針有很多問題,但我在這裏做的是更復雜一點,讓我難以置信。指針內指針的指針
我有一個用於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