Linuxのシステムコールreadlink
は試作品を持っていますパスはファイルに到達するために最初に従わなければならないシンボリックリンクであってもよい。機能open
のために例えばプロトタイプを参照してください:パスは、NULLで終了です引数文字列をコピーせずにsymlinkの値を読み取ることは可能ですか?一般的な使用で</p> <pre><code>ssize_t readlink(const char *pathname, char *buf, size_t bufsiz); </code></pre> <p>、1は一定のNULL終端された文字列で指定したファイル・パス内のディレクトリにアクセスするための関数を書き込み:シンボリックリンクを読むこと
int open(const char *pathname, int flags);
ますが、その中のディレクトリは/
によって終了され、1つはreadlink
に引数としてそれらを供給しています。パス文字は「読み取り専用」なので、/
文字を0に置き換えることはできません。
つまり、最初にディレクトリをコピーし、0を追加してからreadlink
を適用する必要があります。これは一時的に1文字を置き換えるよりも遅くなります。
既存のすべてのLinuxライブラリでこれを行う必要があり、これを高速に実行する方法がないことは私には奇妙に思えます。
ファイルパスにできるだけ早くアクセスする機能を記述する必要があります。 readlink
に適用するディレクトリ文字列をコピーするよりも、ディレクトリシンボリックリンクに従う方法はありますか?
追加:例 - 関数open
を書きたいとしましょう。この関数は、与えられたパスを横切る必要があります。ディレクトリを見るたびに、それがシンボリックリンクかどうかを確認しなければなりません。あなたは、この使用してパスのあらゆるレベルでのシンボリックリンクをたどることにしました
int open(const char *pathname, int flags);
:
あなたが表示された場合にそれが役立つだろう私たちは実際にあなたが実行している操作を正確に示す擬似コードオーミング。私はシンボリックリンクとファイルを開いて、あなたが何を達成しようとしているのかは完全にはわかりません。 –
明示的に 'O_NOFOLLOW'または' O_EXCL'を 'open'に渡さない限り、' open' *はシンボリックリンクに従います。シンボリックリンクを最初に従うようなことはありません。 –
@FrederikDeweerdtはい、しかし、私の質問は、 'open'のような使用法に関するものではありません。私の質問はそのような_writing_に関する呼び出しです。 –