next up previous contents
Next: TSAP címének kijelölése Up: A Transport Layer Previous: Kommunikációs végpont (TSAP)

Buffermanipulációs rutinok

A TLI által használt adatstrukturák mérete (például a cím hossza) függ a használt transzport-protokoll jellemzoitol is, ezért a nekik szükséges memória allokálásához és deallokálásához a TLI biztosítja a szükséges függvényeket. Ezek a függvények a következok:

     charptr=t_alloc(tfd,structtype,fields);

illetve

     t_free(charptr,structtype);

A t_alloc() függvény lefoglal egy, a tfd paraméterben megadott fájldeszkriptorral azonosított transzportvégponthoz tartozó structtype típusú struktúrának szükséges nagyságú memóriaterületet. A fields paraméter megadja, hogy ha a létrehozandó struktura tartalmaz a korábban említett netbuf strukturát (esetleg többet), akkor melyik netbuf típusúnak kell helyet lefoglalni.

A structtype paraméter értéke a következok közül lehet valamelyik:

A fields paraméter értéke a következo értékek LOGIKAI VAGY kapcsolataként állítható össze aszerint, hogy a létrehozandó struktúra mely netbuf bufferének legyen hely allokálva.

Erre a hívásra tekintsük a következo példát:

     #include <tiuser.h>

     char *ptr;
     int tfd;

     tfd=t_open("/dev/udp", ...);
     /*
     ... tegyuk fel, hogy nem volt hiba a fenti hivasnal
     */
     ptr=t_alloc(tfd, T_UDERROR, T_ALL);
     if (ptr == NULL) {
          fprintf(stderr," hiba ...");
          exit(1);
          }

     /*
     ... stb. ...
     */

A fenti programrészben meg lesz nyitva egy UDP típusú TSAP, és a programrészletben látható, hogy az t_uderr struktúrának le lesz foglalva hely a memóriában. A t_uderr struktura szerkezete a következo:

     struct t_uderr {
          struct netbuf addr;
          struct netbuf opt;
          long error;
     };

A fields mezo értéke T_ALL, ezért mind az addr mind pedig az opt mezo buff komponense inicializálva lesz - egy-egy a transzport-protokoll által "javasolt" méretu bufferre fognak mutatni.

A t_free() könyvtári függvény egy korábbi t_alloc() eredményeként lefoglalt memóriaterületet szabadít fel. Az elso paramétere a t_alloc() által lefoglalt és visszaadott memóriaterület kezdocíme. A második paraméter tartalmazza a lefoglalt (illetve a felszabadítandó ...) struktúra típusát. A t_free() felszabadítja a strukturában levo netbuf komponensek buff komponenseinek lefoglalt memóriát is. (Megjegyzés: nehogy a C standard könyvtár free()-jével szabadítsuk fel a t_alloc() által lefoglalt memóriaterületet, mert az nagy hibákat eredményezhet a programban.)



next up previous contents
Next: TSAP címének kijelölése Up: A Transport Layer Previous: Kommunikációs végpont (TSAP)



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996