|
Document of c-modernization-kit (funcman) 1.0.0
|
関数動的呼び出し機構 (funcman) の公開 API ヘッダー。 More...
#include <stddef.h>#include <dlfcn.h>#include <pthread.h>Go to the source code of this file.
Data Structures | |
| struct | funcman_object |
| 関数ポインタキャッシュエントリ。 More... | |
Macros | |
| #define | _GNU_SOURCE |
| #define | MODULE_HANDLE void * |
| Linux/Windows 共通のモジュールハンドル型。 | |
| #define | FUNCMAN_NAME_MAX 256 |
| lib_name / func_name 配列の最大長 (終端 '\0' を含む)。 | |
| #define | NEW_FUNCMAN_OBJECT(key, type) |
| funcman_object 静的変数の初期化マクロ。 | |
| #define | funcman_get_func(fobj, type) |
| 拡張関数ポインタを返します。 | |
Functions | |
| void * | _funcman_get_func (funcman_object *fobj) |
| 拡張関数ポインタを返します。この関数は内部用です。 | |
| int | funcman_is_declared_default (funcman_object *fobj) |
| funcman_object が明示的デフォルトかどうかを返します。 | |
| void | funcman_init (funcman_object *const *fobj_array, const size_t fobj_length, const char *configpath) |
| funcman_object ポインタ配列を初期化します。 | |
| void | funcman_dispose (funcman_object *const *fobj_array, const size_t fobj_length) |
| funcman_object ポインタ配列を解放します。 | |
| int | funcman_info (funcman_object *const *fobj_array, const size_t fobj_length) |
| funcman_object ポインタ配列の内容を標準出力に表示します。 | |
| int | get_lib_path (char *out_path, const size_t out_path_sz, const void *func_addr) |
| 指定した関数が所属する共有ライブラリ (.so/.dll) の絶対パスを取得します。 | |
| int | get_lib_basename (char *out_basename, const size_t out_basename_sz, const void *func_addr) |
| 指定した関数が所属する共有ライブラリ (.so/.dll) の basename (パスなし・拡張子なし) を取得します。 | |
関数動的呼び出し機構 (funcman) の公開 API ヘッダー。
funcman は、テキスト設定ファイルから関数シンボルとライブラリ名を読み込み、 実行時に動的リンクで関数を解決するキャッシュ機構です。
使用方法:
Definition in file funcman.h.
| #define FUNCMAN_NAME_MAX 256 |
lib_name / func_name 配列の最大長 (終端 '\0' を含む)。
Definition at line 56 of file funcman.h.
Referenced by _funcman_get_func(), and funcman_init().
| #define NEW_FUNCMAN_OBJECT | ( | key, | |
| type ) |
funcman_object 静的変数の初期化マクロ。
| [in] | key | この関数インスタンスの識別キー (文字列リテラル)。 |
| [in] | type | 格納する関数ポインタの型 (例: sample_func_t)。 |
| #define funcman_get_func | ( | fobj, | |
| type ) |
拡張関数ポインタを返します。
| [in] | fobj | funcman_object へのポインタ。 |
| [in] | type | NEW_FUNCMAN_OBJECT で指定したものと同じ関数ポインタ型。 |
|
extern |
拡張関数ポインタを返します。この関数は内部用です。
既にロード済みの場合は即座に格納済みの関数ポインタを返します。
| [in,out] | fobj | funcman_object へのポインタ。 |
Definition at line 21 of file funcman_get_func.c.
References funcman_object::func_name, funcman_object::func_ptr, FUNCMAN_NAME_MAX, funcman_object::handle, funcman_object::lib_name, funcman_object::mutex, and funcman_object::resolved.
Referenced by funcman_info(), and funcman_is_declared_default().
|
extern |
funcman_object が明示的デフォルトかどうかを返します。
lib_name と func_name がともに定義ファイルで default に設定されている場合に 1 を返します。
それ以外の場合は 0 を返します。
| [in] | fobj | funcman_object へのポインタ。 |
Definition at line 17 of file funcman_is_declared_default.c.
References _funcman_get_func(), and funcman_object::resolved.
|
extern |
funcman_object ポインタ配列を初期化します。
必ず、constructor / DllMain コンテキストから呼ぶようにしてください。
| [in] | fobj_array | funcman_object ポインタ配列。 |
| [in] | fobj_length | 配列の要素数。 |
| [in] | configpath | 定義ファイルのパス。 |
Definition at line 37 of file funcman_init.c.
References CONFIG_LINE_MAX, funcman_object::func_key, funcman_object::func_name, FUNCMAN_NAME_MAX, and funcman_object::lib_name.
|
extern |
funcman_object ポインタ配列を解放します。
必ず、destructor / DllMain コンテキストから呼ぶようにしてください。
| [in] | fobj_array | funcman_object ポインタ配列。 |
| [in] | fobj_length | 配列の要素数。 |
Definition at line 17 of file funcman_dispose.c.
References funcman_object::func_ptr, and funcman_object::handle.
|
extern |
funcman_object ポインタ配列の内容を標準出力に表示します。
| [in] | fobj_array | funcman_object ポインタ配列。 |
| [in] | fobj_length | 配列の要素数。 |
Definition at line 21 of file funcman_info.c.
References _funcman_get_func(), funcman_object::func_key, funcman_object::func_name, funcman_object::func_ptr, funcman_object::handle, funcman_object::lib_name, and funcman_object::resolved.
|
extern |
指定した関数が所属する共有ライブラリ (.so/.dll) の絶対パスを取得します。
| [out] | out_path | 出力バッファ。 |
| [in] | out_path_sz | 出力バッファサイズ[byte]。 |
| [in] | func_addr | 所属モジュールを特定するための関数アドレス。 |
Definition at line 313 of file get_lib_info.c.
References get_self_path_posix(), and MYLIB_OK.
Referenced by get_lib_basename().
|
extern |
指定した関数が所属する共有ライブラリ (.so/.dll) の basename (パスなし・拡張子なし) を取得します。
Linux の .so.1.2.3 のようなバージョン付きは ".so." より前を basename とみなします。
| [out] | out_basename | 出力バッファ。 |
| [in] | out_basename_sz | 出力バッファサイズ[byte]。 |
| [in] | func_addr | 所属モジュールを特定するための関数アドレス。 |
Definition at line 331 of file get_lib_info.c.
References copy_str(), get_ilename_part(), get_lib_path(), MYLIB_EFAIL, MYLIB_EINVAL, MYLIB_OK, and strip_extension_inplace().