2016-09-19 14 views
-2

ファイルポインタfpが開いているファイルを指している場合、名前を付けるポータブルな方法はありますか?関数の名前変更は、ファイルを参照している現在の名前がないので、この場合は使用できません。匿名ファイルポインタの名前付け

+0

"開いているファイルに_points _" ...どういう意味ですか? –

+1

[匿名の(リンクされているが開いている)ファイルの再リンク]の可能な複製(0120-667272) – slim

+1

"可能性のある詐欺"主にあなたの質問に答えます。あなたはできません。唯一可能な相違点は、ファイルがどこかのファイル名にリンクされている可能性があるということですが、まだその関係を逆方向に発見することはできないというセキュリティの問題です。 – slim

答えて

3

Linux上で、あなたはAT_EMPTY_PATHフラグを指定することにより、linkat

int linkat(int olddirfd, const char *oldpath, 
      int newdirfd, const char *newpath, int flags); 

を使用することができます。例えば、そのようなこと:これは、元のファイルの名前を変更しないことを

linkat(fileno(fp), NULL, AT_FDCWD, "/path/to/new/name", AT_EMPTY_PATH); 

注意、それは単にそれへの新しいハードリンク(すなわち、新しい名前)を作成します。 AT_EMPTY_PATHはLinuxの拡張機能なので、この方法も移植性がありません。

+0

'fp'は' FILE * 'であると述べたので' fp'は 'fileno(fp)'でなければなりません。 – Barmar

+0

あなたが書いた 'linkat'への呼び出しは、記述された' AT_EMPTY_PATH'を使用していないので、この答えは混乱します。 –

+0

@IanAbbottおっと、私の悪い、私はそれを修正しました。 – redneb

関連する問題