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 */
};

編集: i ノードと名前の間に 1 対 1 のマッピングがないことは理解していますが、メジャー/マイナー/ファイル記述子を知っている必要があり、ファイル システムで i ノードの名前の一部を検索できます。

4

2 に答える 2

4

実際には、ファイルを開くために使用されたファイル パスを取得できます。Linuxでは、構造体ファイルは開いているファイルを表し、そのファイルを開くために使用されるパスが構造に関連付けられています。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 ライクな OS では、ファイル オブジェクトは任意の数の名前で指すことができ、ファイル オブジェクト自体にはそれらの名前へのポインタはありません。名前はファイルの機能ではなく、単なる外部インデックスです。

于 2013-06-18T17:06:54.270 に答える