我想通過kgdb查看文件名,所以我無法調用函數和宏來以編程方式獲取它。我需要通過手動檢查數據結構來找到它。在Linux中,如何從「struct file」結構中獲取文件名,同時用kgdb跨越內核?
一樣,如果我在gdb這裏有一個斷點,我怎麼可能用gdb環顧四周,發現文件名?
我試過在環視filp.f_path
,filp.f_inode
等。我無法在任何地方看到文件名。
ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
{
struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };
struct kiocb kiocb;
ssize_t ret;
init_sync_kiocb(&kiocb, filp);
kiocb.ki_pos = *ppos;
kiocb.ki_left = len;
kiocb.ki_nbytes = len;
ret = filp->f_op->aio_write(&kiocb, &iov, 1, kiocb.ki_pos);
if (-EIOCBQUEUED == ret)
ret = wait_on_sync_kiocb(&kiocb);
*ppos = kiocb.ki_pos;
return ret;
}
OK斯蒂芬,我知道這是一個單獨的問題,但我一直在試圖找出如何控制代碼語法高亮或者至少碼識別了幾個月,並沒有找到答案。你是如何解決它以識別我的C代碼在哪裏開始的? –
[Markdown編輯幫助](http://stackoverflow.com/editing-help) –
打開文件時,文件系統從目錄項中查找inode,然後忘記inode以外的所有內容;沒有直接的聯繫。由於像硬鏈接,'unlink'和'O_TMPFILE'這樣的機制,'struct file'可以有零個或多個文件名。 –