A következokben ismertetett adatstrukturák általában minden STREAMS driverben megvannak. Azért fontosak, mert a kernel ezek alapján találja meg a driver különféle szolgáltatásait végzo eljárásait.
--- - A modul információs struktura - ---
Ez a struktura az egyes stream sorok jellemzoit tartalmazza. A felépítése a következo (ISC UNIX 3.2 alapján) :
struct module_info { ushort mi_idnum; char *mi_idname; short mi_minpsz; short mi_maxpsz; ushort mi_hiwat; ushort mi_lowat; };Az
mi_idnum
mezo tartalmazza a modul azonosítószámát. A
mi_idname
mezo tartalmazhatja a modul nevére (egy stringre)
mutató pointert (a kernel ez alapján a név alapján meg tudja találni). A
mi_minpsz
és a mi_maxpsz
mezok a modul által
elfogadott üzenetek minimális illetve maximális méretét szabják meg.
Ezek a mezok mindig csak a stream-fejhez legközelebb levo STREAMS
modulnál érdekesek, mert a STREAM-fej úgy fogja a lefelé küldött
adatokat üzenetekre szétvágni, hogy az egyes üzenetek mérete a megadott
minimális és maximális üzenetméret közé essen. A legfelso modul alatti
modulokban megadott maximális és minimális üzenetméretet a STREAMS
rendszer nem használja semmire, a programozó maga dönti el, hogy
valamire akarja-e azt használni.
A maradék két mezo a low ill. high water mark értékeket tartalmazzák.
Ezeknek az értékeknek a kiválasztásakor figyelembe kell venni azt, hogy
a stream-fej a 64 bytenál rövidebb üzeneteknek is 64 byteot foglal le,
nehogy a STREAMS rendszer rendelkezésére álló memória túlságosan
feldarabolódjon.
--- - A qinit struktura - ---
Ebben a strukturában kell tárolni azt, hogy az egyes soroknak a szolgáltatásait melyik eljárásokban kódoltuk. A struktura felépítése a következo :
struct qinit { int (*qi_putp)(); /* put eljarasra mutat */ int (*qi_srvp)(); /* service eljarasra mutat */ int (*qi_qopen)(); /* open ill I_PUSH eseten meghivva */ int (*qi_qclose)(); /* lezarasnal meghivva */ int (*qi_admin)(); /* 3bnet admin funkcioja */ struct module_info *qi_minfo; /* module_info struktura */ struct module_stat *qi_mstat; /* statisztikai struktura */ };Ezt a strukturát a driveren belül nem szabad megváltoztatni (mivel ez másokra is kihatással lenne). Az open és close rutinokra mutató pointerek a read qinit strukturában legyenek, mivel a rendszer mindenképpen azokat hajtja végre. (Érdemes a write oldalra a könnyebb olvashatóság érdekében ugyanezeket az eljárásokat bejegyezni.)
--- - A streamtab struktura - ---
Ez a struktura tartalmazza a driverek read ill. write queue-jainak a qinit strukturáira mutató pointert. Felépítése :
struct streamtab { struct qinit *st_rdinit; /* Felso read queue */ struct qinit *st_wrinit; /* Felso write queue */ struct qinit *st_muxrinit; /* Also read queue */ struct qinit *st_muxwinit; /* Also write queue */ };Az alsó soroknak csak a multiplexer drivereknél van szerepük.