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.