uselib - システムコールの説明 - Linux コマンド集 一覧表
名前
uselib - 共有ライブラリを選択する
書式
#include <unistd.h>
int uselib(const char *
library
);
説明
システムコール uselib () は、呼び出し元プロセスが使用する 共有ライブラリをロードする際に使用される。 このシステムコールにはライブラリのパス名を指定する。 ライブラリをロードするアドレスはライブラリ自身に書かれている。 ライブラリは認識可能なバイナリ形式であればどんな形式でもよい。
返り値
成功した場合 0 を返す。失敗した場合 -1 を返し、 errno をエラーの内容に従って設定する。
エラー
open
(2) と
mmap
(2) が返すエラーコードに加えて、以下のエラーコードが設定されることがある。
- EACCES
- library で指定されたライブラリに対する読み込み許可、または実行許可がない。 もしくは library が存在するディレクトリかその上位のいずれかに対する検索許可がない ( path_resolution (2)も参照)。
- 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 は、このシステムコールを使用しない。