2

我想知道/sys/*函数中的哪个文件static ssize_t sysfs_write_file(struct file *file, const char __user *buf, size_t count, loff_t *ppos)被调用。问题是如何通过拥有来获取文件名/路径struct file *file

struct file {
  mode_t f_mode;
  loff_t f_pos;
  unsigned short f_flags;
  unsigned short f_count;
  unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;
  struct file *f_next, *f_prev;
  int f_owner;         /* pid or -pgrp where SIGIO should be sent */
  struct inode * f_inode;
  struct file_operations * f_op;
  unsigned long f_version;
  void *private_data;  /* needed for tty driver, and maybe others */
};

编辑: 我知道 inode 到名称之间没有一对一的映射,但我必须知道主要/次要/文件描述符,并且可以在文件系统中搜索一些 inode 的名称。

4

2 回答 2

4

实际上,您可以检索用于打开文件的文件路径。在 linux 中,struct file 代表一个打开的文件,并且具有用于打开该文件的路径与该结构相关联。在 2.6.20 之前,它是一个名为 f_dentry 的成员,而从 2.6.20 开始,它是一个名为 f_path 的新成员。您可以使用函数 d_path() 直接检索文件的完整路径。

参考以下Linux源代码:

http://lxr.free-electrons.com/source/include/linux/fs.h?v=3.10#L763

http://lxr.free-electrons.com/source/fs/dcache.c?v=3.0#L2626

并回答: 如何从内核模块内的文件描述符中获取文件名?

于 2014-11-19T00:24:41.200 回答
3

在 Linux 和其他类 Unix 操作系统中,文件对象可以由任意数量的名称指向,并且文件对象本身没有指向其中任何名称的指针。名称不是文件的特征,它们只是一个外部索引。

于 2013-06-18T17:06:54.270 回答