t_alloc() - ライブラリー構造体の割り振り

標準

標準/拡張機能 C/C++ 依存項目
XPG4.2 両方  

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <xti.h>

char *t_alloc(int fd, int struct_type, int fields);

機能説明

以下に指定したとおり、メモリーを各種のトランスポート関数引数構造体に 動的に割り振ります。t_alloc() は、メモリーを指定された構造体に割り振り、またメモリーを構造体が参照したバッファーに割り振ります。

割り振る構造体は struct_type によって指定され、次のいずれかになっている必要があります。
        T_BIND       struct t_bind
        T_CALL       struct t_call
        T_OPTMGMT    struct t_optmgmt
        T_DIS        struct t_discon
        T_UNITDATA   struct t_unitdata
        T_UDERROR    struct t_uderr
        T_INFO       struct t_info
ここで、これらの各構造体は、その後で 1 つ以上の トランスポート関数に対する引数として使用できます。
T_INFO を除く、上の各構造体には、型 struct netbuf の フィールドが少なくとも 1 つ含まれています。この型の 各フィールドの場合には、ユーザーはそのフィールドの バッファーも同様に割り振る必要があると指定できます。割り振られた バッファーの長さは、t_open() または t_getinfo() の info 引数に戻された該当するサイズと等しいかまたは 大きくなります。info 引数の関係のあるフィールドは、次のリストで説明します。fields 引数は、どのバッファーを割り振るかを 指定します。ここで、引数は次のいずれかのビット単位の or です。
T_ADDR
t_bind、t_call、t_unitdata、または t_uderr 構造体の addr フィールド。
T_OPT
t_optmgmt、t_call、t_unitdata、または t_uderr 構造体の opt フィールド。
T_UDATA
t_call、t_discon、または t_unitdata 構造体の udata フィールド。
T_ALL
指定の構造体の関係のあるフィールド。fd によって指定された トランスポート提供者がサポートしないフィールドは、割り振られません。

fields に指定されている関係のある各フィールドの場合には、t_alloc() はメモリーをフィールドに関連したバッファーに割り振り、len フィールドをゼロまで初期設定し、それに応じて buf ポインターと maxlen フィールドも初期設定します。フィールドに渡された無関係の値または不明な値は無視されます。割り振られたバッファーの長さが、t_open() と t_getinfo() に対する呼び出しでユーザーに戻されるものと同サイズの情報に基づくので、fd は、新規に割り振られた構造体が渡されるトランスポート終点を指している必要があります。この方法で、該当するサイズ情報をアクセスできます。指定されたフィールドと関連したサイズ値が -1 または -2 (t_open() または t_getinfo() を参照) の場合に、t_errnoTSYSERR に、errno を EINVAL に設定すると、t_alloc() は割り振るバッファーのサイズを判別できず、失敗します。fields に指定されていないフィールドの場合には、buf は NULL ポインターに設定され、lenmaxlen はゼロに設定されます。

構造体を 割り振るために t_alloc() を使用すると、ユーザー・プログラムの 互換性を確実にして、トランスポート・インターフェース関数を 将来解放するのに役立ちます。

有効状態: すべて。ただし T_UNINIT を除く。

戻り値

正常に実行された場合、t_alloc() は、新規に割り振られた構造体を指すポインターを戻します。

正常に実行されなかった場合は、t_alloc() は NULL ポインターを戻し、errno を以下のいずれかの値に設定します。
エラー・コード
説明
TBADF
指定されたファイル記述子は、トランスポート終点を 指していません。
TNOSTRUCTYPE
サポートされない struct_type が要求されました。これには、指定されたトランスポート提供者タイプと矛盾している、すなわち接続指向またはコネクションレスの、構造体型に対する要求を インクルードできます。
TPROTO
このエラーは、XTI と他に適切な XTI (t_errno) がない トランスポート提供者の間で通信問題が検出されたことを 示しています。
TSYSERR
この関数の実行時に、システム・エラーが発生しました。

関連情報