linux-kernel – 在Linux中,我如何从“struct file”结构中获取
发布时间:2020-12-13 19:26:26 所属栏目:Linux 来源:网络整理
导读:我正在尝试通过kgdb查看文件名,因此我无法调用函数和宏来以编程方式获取它.我需要通过手动检查数据结构来找到它. 就像我在gdb中有一个断点一样,我怎么能用gdb环顾四周找到文件名呢? 我试过在filp.f_path,filp.f_inode等处查看.我无法在任何地方看到文件名.
我正在尝试通过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; } 解决方法
在Linux内核中,文件结构本质上是内核“看到”文件的方式.内核对文件名不感兴趣,只对打开文件的inode感兴趣.这意味着丢失了对用户重要的所有其他信息.
编辑:这个答案是错误的.您可以使用filp-> f_path.dentry获取dentry.从那里,您可以使用相关的FS标志获取dentry的名称或完整路径. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |