私は私が書いた小さなLinuxカーネルモジュール内、指定したファイル記述子からファイル名を取得する必要があります。私はGetting Filename from file descriptor in Cで与え溶液を試みたが、何らかの理由で、それは(溶液中で述べたよう/proc/self/fd/NNN
にreadlink
を使用して)ガベージ値を出力します。どうしたらいいですか?カーネルモジュール内のファイルディスクリプタからファイル名を取得するにはどうすればよいですか?
答えて
SYS_readlink
を呼び出さないでください - これらのリンクのいずれかが読み込まれたときprocfs
が行うのと同じ方法を使用します。 proc_pid_readlink()
とproc_fd_link()
のコードをfs/proc/base.c
に開始してください。大まか
、あなたは(あなたがへの参照を取っている)に興味を持っているタスク、あなたがやりたいからint fd
とstruct files_struct *files
与えられた:あなたのコードがPROCESS-で実行されている場合
char *tmp;
char *pathname;
struct file *file;
struct path *path;
spin_lock(&files->file_lock);
file = fcheck_files(files, fd);
if (!file) {
spin_unlock(&files->file_lock);
return -ENOENT;
}
path = &file->f_path;
path_get(path);
spin_unlock(&files->file_lock);
tmp = (char *)__get_free_page(GFP_KERNEL);
if (!tmp) {
path_put(path);
return -ENOMEM;
}
pathname = d_path(path, tmp, PAGE_SIZE);
path_put(path);
if (IS_ERR(pathname)) {
free_page((unsigned long)tmp);
return PTR_ERR(pathname);
}
/* do something here with pathname */
free_page((unsigned long)tmp);
コンテキスト(例えばシステムコールを介して起動)とファイルディスクリプタは、現在のプロセスからのもので、その後、あなたは現在のタスクのstruct files_struct *
ためcurrent->files
を使用することができます。
ニース。それはうまくいった。ありがとう!クイック質問。 'path_get'と' path_put'の呼び出しはどのような目的のために役立ちますか?それらを削除することは私のプログラムにはあまり効果がありません。また、なぜ 'sys_readlink'が動作しないのでしょうか? – Siddhant
@Siddhant: 'path_get()'と 'path_put(それが消えないように、あなたはそれで動作するようにしようとしている間、彼らはパスを固定するので)'コールは、正確に必要とされている(すべての '構造体PATH' containsは 'struct vfsmount'と' struct dentry'への一対のポインタです)。 – caf
Aha。再度、感謝します! – Siddhant
- 1. pythonのダウンロードURLからファイルディスクリプタを取得するにはどうすればよいですか?
- 2. インクルードファイルから、インクルードするファイルのファイル名を取得するにはどうすればよいですか?
- 3. Antのディレクトリ名からファイル名を取得するにはどうすればよいですか?
- 4. ディレクトリからファイル固有のファイル名を取得するにはどうすればよいですか?
- 5. FTP経由でリモートサーバからファイル名のリストを取得するにはどうすればよいですか?
- 6. ファイルのショートカットからパス名を取得するにはどうすればよいですか?
- 7. sitecustomize.pyからスクリプトの名前/ファイルを取得するにはどうすればよいですか?
- 8. PyQt:ユーザーからファイル名の大きなリストを取得するにはどうすればよいですか?
- 9. C#からWord文書のファイル名を取得するにはどうすればよいですか?
- 10. DLL内からアプリケーション名を取得するにはどうすればよいですか?
- 11. DNSドメイン名から短い「ドメイン名」を取得するにはどうすればよいですか?
- 12. jenkinsfileの内部からパイプラインの名前を取得するにはどうすればいいですか
- 13. プロビジョニングプロファイルからコード署名IDの名前を取得するにはどうすればよいですか?
- 14. カーネルモジュールntとwin32kにアドレスを取得するにはどうすればよいですか?
- 15. インストールされている.msiファイルの名前を取得するにはどうすればよいですか?
- 16. タイプ名からクラス名を取得するにはどうすればよいですか?
- 17. 一時ファイルを開き、そのファイル名を取得するにはどうすればよいですか?
- 18. 入力ファイル要素から実際のファイルを取得するにはどうすればよいですか?
- 19. python 2.3.4でIOErrorのエラーオブジェクトからディレクトリ名を取得するにはどうすればよいですか?
- 20. ラベル内で実行中のバッチファイルの名前を取得するにはどうすればよいですか?
- 21. このJSONオブジェクトからアーティスト名の値を取得するにはどうすればよいですか?
- 22. Arrayストアビットから最初のarray1bitsの名前を取得するにはどうすればよいですか?
- 23. サーバ名からファイルパスの特定の部分を取得するにはどうすればよいですか?
- 24. Androidローカルデバイスからのテキストタイプファイルの名前とパスを取得するにはどうすればよいですか?
- 25. 私はClojurescriptプログラム内でClojurescript名前空間を取得するにはどうすればよいですか?
- 26. AutoHotkeyで現在のスクリプトのファイル名を取得するにはどうすればよいですか?
- 27. PHPの関数内で関数名を取得するにはどうすればよいですか?
- 28. ビジュアルスタジオ2015.コンパイル時にコード内のプロジェクト名を取得するにはどうすればよいですか?
- 29. CのIPv4アドレスからホスト名を取得するにはどうすればよいですか?
- 30. 匿名型からプロパティの値を取得するにはどうすればよいですか?
[sys_readlinkが失敗する可能性があります。EFAULT - 代替](http://stackoverflow.com/questions/8216871/sys-readlink-fails-efault-alternative) – ephemient