質問

可能で、ファイル名のファイル記述子(Linux)。

役に立ちましたか?

解決

NNNはファイルディスクリプタである。ここで、

あなたはreadlink /proc/self/fd/NNN に使用することができます。ファイルはそれ以来、移動または削除された場合(Linuxはいくつかのケースでリネームを追跡することができますが)しかし、それはもはや正確でないかもしれない - それは、それが開かれたときだったので、これはあなたのファイルの名前を与えます。確認するには、指定したファイル名をstat、あなたが持っているFDをfstat、そして必ずst_devst_inoが同じで行います。

もちろん、すべてではないファイルディスクリプタはファイルを参照し、それらのために、あなたは、このようなpipe:[1538488]などいくつかの奇妙なテキスト文字列を、表示されます。実際のファイル名のすべてが絶対パスになりますので、あなたはこれらを簡単に十分であるかを決定することができます。他の人が指摘しているようさらに、ファイルがそれらを指す複数のハードリンクを持つことができます - これは、それがで開かれたものを報告します。あなたが指定したファイルのすべての名前を検索したい場合は、あなただけのファイルシステム全体を横断する必要があります。

他のヒント

私たちは/proc仮想ファイルシステムを持っていないので、受け入れソリューションが動作しないことができるのMac OS X上でこの問題を抱えています。

私たちは、代わりに、F_GETPATHためfcntlコマンドを持っています。

 F_GETPATH          Get the path of the file descriptor Fildes.  The argu-
                    ment must be a buffer of size MAXPATHLEN or greater.

だから、ファイル記述子に関連付けられているファイルを取得するには、あなたがこのスニペットを使用することができます:

#include <sys/syslimits.h>
#include <fcntl.h>

char filePath[PATH_MAX];
if (fcntl(fd, F_GETPATH, filePath) != -1)
{
    // do something with the file path
}
MAXPATHLENが定義されている場所、私が覚えていることはありませんので、

、私はsyslimitsからPATH_MAXは大丈夫だろうと思っています。

GetFileInformationByHandleEx を備えたWindowsでは、合格 FileNameInfo には、ファイル名を取得することができます。

としてのタイラーの指摘がないか必要な"で直接確実にし、さらFD対応することがあり0ファイル名(様々なケース)>1(複数のハードリンク"はどのように後者の状況では、一般に).だいが必要な機能のすべての制限(スピードのカバーを取り付け0,2,...結果より1)、こちらのどのように行うことができるので:第一に、 fstat のFD--これがありますが、この結果、 struct stat, うデバイスファイルの生活は、どのよう多くのハードリンクでであるとにかかわらず、特別なファイル等この場でお答え--例0の場合ハードリンクらしい、ありません対応するファイル名の速度で処理が行われます。

さびはご購読者の皆様にはご迷惑をお願いしい"歩く木"のディレクトリに関連するデバイスまでのすべてのハードリンク(またはずの必要がなければよいずすしています。そのため、ご利用 readdir (opendir&cのコースを再帰的に開くサブディレクトリまでデリバリー struct dirent このように同士のinode番号または原 struct stat (この時期にしたい場合は、全体のパスだけでなく、名称にする必要がありまで徒歩チェーンのディレクトリを逆再構成します。

この一般的なアプローチが記載される場合がありますので使用を避けが必要なものより詳細なコードをCかりでなく書けないと思い書いていないのでななつきに耐える必然的に遅いパフォーマンになってい!= 1結果を目的のアプリケーション-).

あなたは、構造体のstatでファイルのinodeを取得するにはFSTAT()を使用することができます。その後、readdirの()を使用すると、あなたがディレクトリに(構造体のdirent)に存在するものは、対応するファイル名を検索する(そうでなければ、ファイルシステム全体を検索する必要があります、あなたはディレクトリを知っていると仮定して)で見つかったiノードを比較することができます。 淫乱?

インポッシブル。ファイルディスクリプタはファイルシステムに複数の名前を有していてもよいし、それがすべてでは名前を持たないことがあります。

編集:あなたはOSを指定していなかったので、あなたはどんなOS固有のAPIなしで、昔ながらのPOSIXシステムについて話していると仮定すると、

scroll top