書式
#include <unistd.h>int uselib(const char *library);
説明
システムコール uselib() は、呼び出し元プロセスが使用する 共有ライブラリをロードする際に使用される。 このシステムコールにはライブラリのパス名を指定する。 ライブラリをロードするアドレスはライブラリ自身に書かれている。 ライブラリは認識可能なバイナリ形式であればどんな形式でもよい。返り値
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。エラー
open(2) と mmap(2) が返すエラーコードに加えて、以下のエラーコードが設定されることがある。- EACCES
- library で指定されたライブラリに対する読み込み許可、または実行許可がない。 もしくは library が存在するディレクトリかその上位のいずれかに対する検索許可がない (path_resolution(7) も参照)。
- ENFILE
- オープンされたファイルの総数がシステム全体の上限に達していた。
- ENOEXEC
- library で指定されたファイルが、実行可能ファイルと認識されるファイル種別ではない。 例えば、正しいマジックナンバーが付いていない。
準拠
uselib() は Linux 特有の関数であり、移植性を持たせたいプログラム には使用すべきでない。注意
初期の libc の起動コードは、 uselib() を使って、 バイナリ中のリストに書かれている共有ライブラリを リスト中のそのままの名前でロードしていた。libc 4.3.2 以降では、これらの名前の前に "/usr/lib", "/lib", "" を つけて共有ライブラリを探すようになった。 libc 4.3.4 以降では、これらの名前の共有ライブラリをまず LD_LIBRARY_PATH で指定されたディレクトリで探し、見つからなければ、 名前の前に "/usr/lib", "/lib", "/" をつけて探す。
libc 4.4.4 以降では、ライブラリ "/lib/ld.so" だけがロードされ、その後で この動的ライブラリが (このシステムコールをもう一度使って) 必要な残りのライブラリをロードできるようになっている。
glibc2 は、このシステムコールを使用しない。
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。