私は一方で、私はこのようにdlsym()
を使用してwrite()
を起動し、Cでwrite()
などのシステムコールを呼び出す:システムコールまたはdlsym?どの方が速いの?
ssize_t original_write(int fd, const void *buf, size_t count)
{
typedef ssize_t (*orig_write_type)(int, const void *, size_t);
static orig_write_type orig_write;
if (!orig_write)
orig_write = (orig_write_type) dlsym(RTLD_NEXT, "write");
ssize_t ret = orig_write(fd, buf, count);
return ret;
}
私が速くなる方法好奇心?私がwrite()
と呼ぶと、それは暗黙のうちにdlsym()
を呼び出してそのアドレスを得るでしょうか?私を修正してください。あなたのお時間をありがとうございました。
コンパイラはおそらく両方とも同じコードになります。 – Leandros
より速いのは何ですか?あなたは自分でそれを測定することができます... –
Cは 'dlsym()'について何も言わない - それはCによって定義された標準ライブラリ関数の中にはありません。さらに、 'dlsym()'を使って実装を見つけるのは非常に驚きです関数呼び出しを動的ライブラリに実装する。ダイナミックライブラリを備えたシステムには、通常、ダイナミックリンカが必要ありません。しかし全体的に、なぜあなたのプログラムにこのような醜い混乱を加えたいのですか? –