dlclose() - dlopen() オブジェクトのクローズ

標準

標準/拡張機能 C/C++ 依存項目

Single UNIX Specification、バージョン 3

両方 z/OS® V1R6

形式

#define _UNIX03_SOURCE
#include <dlfcn.h>

int  dlclose(void *handle);

機能説明

前回の dlopen() 呼び出しから戻された handle によって参照さ れたダイナミック・リンク・ライブラリー (DLL) は、このアプリケーションでは不要になった ことをシステムに通知します。 DLL がクローズされると、アプリケーションは、その DLL のシンボルおよび従属す る DLL のシンボルは、その後は dlsym() で使用できないことを前提にしなければなりません。

戻り値

参照された DLL が正常にクローズされると、NULL が戻されます。 DLL がクローズされなかったか、または handle がオープン DLL を参照して いない場合、ゼロ以外の値が戻されます。

使用上の注意

  1. 該当するアプリケーションは、dlopen() 呼び出しから戻された handle を、 dlopen() 操作と dlclose() 操作で挟まれた特定のスコープ内でのみ使用しなければなりません。 handle の値は、アプリケーションで、dlsym() および dlclose() の呼び 出しのみで使用される、不透明オブジェクトとして扱われなければなりません。
  2. 明示的に、つまり、dlopen() によってロードされたが、それに対応する dlclose() 呼び出しに よって解放されていない DLL は、LIFO シーケンスのエンクレーブ終了時に自動的に解放されます。
  3. DLL で定義された非ローカルの C++ 静的デストラクターは、 DLL プログラム・オブジェクトがメモリーから削除されるときに 1 回だけ実行されます。
  4. 詳細な診断情報は、dlerror()、_EDC_DLL_DIAG 環境変数、 および Language Environment® DLL 障害制御ブロック (CEEDLLF) チェーンを使って 入手できます。
  5. この関数は、SPC、MTF、および CSP 環境では 使用できません。

以下の例は、dlopen() と dlclose() の使い方を示しています。
...
/* Open a dynamic library and then close it ... */

#include <dlfcn.h>

void *mylib;
int eret;

mylib = dlopen("mylib.so", RTLD_LOCAL | RTLD_LAZY);
...
eret = dlclose(mylib);
...

関連情報