|
Beschreibung
Mit der Funktion t_alloc() reserviert der Transportbenutzer dynamisch Speicher für verschiedene Typen von Strukturen. t_alloc() liefert einen Zeiger auf das neu angelegte Strukturobjekt zurück. Jedes mit t_alloc() erzeugte Strukturobjekt kann beim Aufruf bestimmter XTI-Funktionen als aktueller Parameter übergeben werden.
Als aktuellen Parameter für fd muss der Benutzer den Transportendpunkt spezifizieren, über den das mit t_alloc() erzeugte Strukturobjekt beim Aufruf einer XTI-Funktion (z.B. t_bind()) übergeben wird. Auf diese Weise kann t_alloc() auf die geeignete Größeninformation zugreifen. Die Größe des angelegten Puffers resultiert nämlich aus derselben Information, die der Benutzer mit t_open() und t_getinfo() für den betreffenden Transportendpunkt erhält.
Der Parameter struct_type spezifiziert den Strukturtyp. t_alloc() reserviert dann Speicher für die betreffende Struktur sowie für Puffer, auf die diese Struktur verweist.
Für struct_type kann der Benutzer beim Aufruf von t_alloc() folgende Werte angeben:
T_BIND ( für struct t_bind)
T_CALL (für struct t_call)
T_OPTMGMT (für struct t_optmgmt)
T_DIS (für struct t_discon)
T_UNITDATA (für struct t_unitdata)
T_UDERROR (für struct t_uderr)
T_INFO (für struct t_info)
Mit Ausnahme der Struktur t_info enthält jede der oben genannten Strukturen zumindest eine Komponente vom Typ struct netbuf.
Die Struktur netbuf ist in <xti.h> wie folgt deklariert:
struct netbuf { unsigned int maxlen; unsigned int len; char *buf; };
Mit dem Parameter fields spezifiziert der Benutzer für jede netbuf-Struktur in der durch struct_type spezifizierten Struktur, ob für den Puffer dieser netbuf-Struktur ebenfalls Speicher reserviert werden soll. fields wird gebildet, indem beliebige der nachfolgend beschriebenen Werte durch bitweises inklusives ODER verknüpft werden:
T_ADDR: Komponente addr der Strukturen t_bind, t_call, t_unitdata oder t_uderr
T_OPT: Komponente opt der Strukturen t_optmgmt, t_call, t_unitdata oder t_uderr
T_UDATA: Komponente udata der Strukturen t_call, t_discon oder t_unitdata
T_ALL: alle relevanten Komponenten der durch struct_type spezifizierten Struktur
Für jede durch den Parameter fields spezifizierte netbuf-Struktur reserviert t_alloc() Speicher für den dieser Struktur zugeordneten Puffer. Außerdem initialisiert t_alloc() in den einzelnen netbuf-Strukturen jeweils den Zeiger buf und den Wert von maxlen entsprechend.
Wenn der Wert von maxlen in irgendeiner durch fields spezifizierten netbuf-Struktur den Wert -1 oder -2 hat (siehe t_open() oder t_getinfo()), kann t_alloc() die Größe des Puffers nicht ermitteln und beendet sich mit Fehler. Dabei wird t_errno auf TSYSERR und errno auf EINVAL gesetzt. Für jede nicht in fields spezifizierte netbuf-Struktur wird buf auf NULL und maxlen auf 0 gesetzt.
Returnwert
Bei erfolgreicher Ausführung liefert t_alloc() einen Zeiger auf die neu angelegte Struktur zurück.
Bei Fehler wird der Null-Zeiger zurückgeliefert. t_ errno wird gesetzt, um den Fehler anzuzeigen.
Fehler
TBADF
Der angegebene Dateideskriptor verweist nicht auf einen Transportendpunkt.
TSYSERR
Während der Ausführung dieser Funktion ist ein Systemfehler aufgetreten.