如何获得;“文件名”;从内核中的struct file*?

如何获得;“文件名”;从内核中的struct file*?,c,linux,linux-kernel,C,Linux,Linux Kernel,我想知道函数静态ssize\t在/sys/*中的哪个文件上 调用了sysfs\u write\u文件(struct file*file、const char\u user*buf、size\t count、loff\u t*ppos)。问题是如何通过使用struct file*file获取文件名/路径 struct file { mode_t f_mode; loff_t f_pos; unsigned short f_flags; unsigned short f_count;

我想知道函数
静态ssize\t在
/sys/*
中的哪个文件上 调用了sysfs\u write\u文件(struct file*file、const char\u user*buf、size\t count、loff\u 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的一些名称。

在Linux和其他类似Unix的OSs中,文件对象可以由任意数量的名称指向,而文件对象本身没有指向任何名称的指针。名称不是文件的功能,它们只是一个外部索引。

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

请参阅以下Linux源代码:

并回答:

如果文件是设备,我可以获取文件的主要部分和次要部分吗?如何从文件指针映射回文件系统中的路径?文件指针有一个指向inode的指针,inode将包含设备号等数据。但您没有抓住要点:打开的文件没有名称。您可能已经使用了它的一个名称来访问它,但这基本上是一个单向操作。我没有错过要点,但我的问题是如何从指针映射回文件系统上的文件,这似乎是可能的。为什么您认为这是可能的?可能有20个或多个名称映射到同一个文件,或者没有。因为如果我知道次要名称和主要名称,并且我知道我在/sys/bla/specific bla/very specific/下查找一个名称,如果该名称没有符号,则该名称必须是唯一的。您需要该名称做什么?实际代码将取决于您使用的内核版本,因为struct file和d_path()都随时间而改变。您可以参考另一个问题中的代码作为参考-只需忽略获取指向struct文件指针的部分,因为您已经有了它。