next up previous contents
Elõre: Folyam jellegû I/O Fel: Bevitel és kivitel Vissza: Bevitel és kivitel

Alacsony szintû I/O

Az alacsony szintû be/ki mûveletek a file-leíró (file descriptor, file handle) segítségével hivatkozhatnak a használni kívánt állományokra. A file-leíró egy kis egész szám, amely kétféle lehet: az operációs rendszertõl induláskor kapott, vagy egy könyvtári függvény használatával nyert. Az induláskor kapott (predefined) file-leírók a 0, 1 és 2. A 0 az ún. standard bemenet (általában a terminál, de DOS szinten átirányítható, lásd <,|), az 1-es a standard kimenet (általában a képernyõ, de szintén átirányítható), a 2-es pedig a standard hibakimenet, amely mindig a képernyõre kerül. Ezek portábilisak minden implementációnál. A BORLAND C++-ban rendelkezésünkre áll a fentieken kívül a 3-as leíró, amely a COM1 soros vonalat, és a 4-es, amelyik a PRN printert kezeli. A 0 és 3 használható bevitelre, a többi - és a 3-as is - kivitelre. Tetszõleges file megnyitható az open könyvtári függvény segítségével - leírását lásd a függvények ismertetésénél - és a visszaadott érték sikeres megnyitás esetén a file-leíró (egyébként -1). A file-leíró birtokában tetszõleges helyrõl tetszõleges számú byte-ot kiírhatunk az adott állományba az aktuális pozíciótól kezdve a write függvény segítségével, illetve az aktuális file-pozíciótól olvashatunk adott területre tetszõleges számú byte-ot (legfeljebb a file végéig) a read használatával. A read és a write az átvitelt minden konverzió nélkül végzi. Vigyünk ki például az fd leíróval kezelt file-ba egy lebegõpontos tömböt:

            float vekt[20];
            ...
            n = write(fd, (char *)vekt, sizeof(vekt));
A forrásterületet karaktermutatóként várja a függvény, ezért alkalmaztunk típuskonverziót, a kiviendõ byte-ok számának meghatározását a fordítóra bíztuk. Ha a visszaadott érték ezzel nem egyezik meg, akkor file-kezelési hiba történt. Az adatok visszaolvasása analóg módon történik. Hasznos lehet még az lseek függvény is, ezzel a file-ba írás illetve file-ból olvasás aktuális pozícióját állíthatjuk a kívánt helyre (a file-t mint egy lassú elérésû tömböt használhatjuk). Ha egy állományt le akarunk zárni, a close függvényt hívjuk meg.