Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

t_alloc() - Speicher für Bibliotheksstruktur anlegen

&pagelevel(4)&pagelevel

#include <xti.h>

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

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.

Siehe auch

t_free(), t_getinfo(), t_open()