A STREAMS egy UNIX kernelbe beépített mechanizmus, mely lehetové
tesz egy kétirányú kapcsolat kiépítését a felhasználói programok és a
karakteres, adatkommunikációs STREAMS device driverek között.
Eredetileg a UNIX terminálok vezérlésére alakították ki, de késobb
alkalmazhatónak bizonyult hálózati protokollok implementálására is. (A
Release 4 UNIX már STREAMS terminál-drivereket használ.) A STREAMS
device driverek adatokat közvetíthetnek a felhasználói programok és a
hardware berendezések között, de vannak speciális driverek is, például a
multiplexer driverek, amelyek legtöbbször nem állnak a hardware
perifériákkal közvetlen kapcsolatban.
Az adatáramlás a driver és a felhasználói program között egyszerre két
irányban folyhat: lefelé a felhasználótól a driverig (ezt nevezik
write oldalnak) és felfelé a drivertol a felhasználó
irányába (ezt nevezik read oldalnak is). Mindkét irányú adatáramot
( streamet) egymás mögé rakott sorok ( queuek) segítségével
implementálják. Egy stream a STREAMS device drivertol indul és a
stream-fejben végzodik. A stream-fej tartja a kapcsolatot a felhasználó
és a stream alsóbb részei között. Minden egyes STREAMS driverre
vonatkozó open rendszerhívás egy új stream-fejet hoz létre
(amennyiben a driver ezt támogatja).
A driver és a felhasználói program közé beilleszthetünk ún. STREAMS
modulokat, amik se nem driverek, se nem stream-fejek (vagyis egy
STREAMS modult nem szokás például open rendszerhívással
megnyitni). Feladatuk a rajtuk keresztülmeno adatok valamilyen
módosítása - például protokollinformációkkal kiegészíthetik azokat, vagy
az egyes modulok a nekik szóló információkat kivehetik a sorból. Ha a
STREAMS drivert megnyitjuk, akkor létrejön a stream-fej. A modulokat
ezután csak közvetlenül a stream-fej alá rakhatjuk az ioctl
rendszerhívással (a megfelelo paraméterek beállításával).
A STREAMS driverek teljesen a kernel területén helyezkednek el, ezért
ezek írásakor különösen kell vigyázni, nehogy valami hibát csináljunk!