fájlleíróból

Fájlleíróból - ez egy előjel nélküli egész, egy folyamat, hogy nyissa meg a fájlt. Száma fájlleírók álló eljárás paraméter korlátozza / OPEN_MAX, meg sys / limits.h fájlt. Ezen kívül a számos fájlleírókkal segítségével állítható be a ulimit -n parancs zászló. Fájlleírókkal nyitott meg a feladatok teljesítésével. cső. creat és fcntl. Jellemzően minden egyes folyamat működik egy egyedülálló leírásait. Azonban ezek a címkék is használhatók a gyermek folyamatok segítségével létrehozott villa funkciót. Ezen túlmenően, a leírásokat lehet másolni a fontal funkciókat. dup és dup2.

Minden nyitott fájlt, olvassa el a magot keresztül az úgynevezett fájlleírók. Fájlleíróból - ez egy nem-negatív egész számot. Amikor megnyit egy meglévő fájlt, és hozzon létre egy új fájlt a kernel vissza a fájl leíró folyamatot.

Alapértelmezett UNIX -shelly társult 0 file leíró szabványos bemenetére a folyamat (terminál), 1 file leíró - szabványos kimenet (a terminál) és a 2 file leíró - standard hiba (azaz amikor a hibák jelennek meg). Ez a megállapodás figyelhető sok UNIX -shellami és számos alkalmazás - és semmi esetre sem nem része a kernel.

POSIX.1 helyébe standard "bűvös szám" 0,1,2 szimbolikus állandók STDIN_FILENO, STDOUT_FILENO és STDERR_FILENO volt.

Fájlleírókkal értékeket vehet fel 0-ról OPEN_MAX. Régebbi verziói UNIX van egy felső határa 19, amely lehetővé teszi egy folyamat, hogy nyissa meg a 20 fájlt. Nos, ez az érték nőtt több ezer.

Fájlkezelõk szolgál index leíró táblázat található, amely a u_block és létrehozta a nucleus minden folyamat. Leggyakrabban, a folyamat megkapja a leírásokat a műveletek nyitott és létrehozva. és örökli a szülő folyamat. Működés villa leíró táblázat bekerül a gyermek folyamat. Ennek eredményeként a gyermek folyamat megkapja a jogot, hogy elérni a fájlokat a szülő folyamat.

fájlleíróból táblát és az asztal nyitott fájlok

adatstruktúra listáját tartalmazó nyitott fájlt, és a lista fájlleírókkal, amely lehetővé teszi, hogy nyomon hozzáférések fájlok és adatok integritásának biztosítása.

Táblázat leíró fájl

Fordítja indexszámot (file leíró) a pointerek fájlokat megnyitni. Minden folyamat u_block létre saját leíró táblázatot. Minden bejegyzés ebben a táblázatban az alábbi mezőket tartalmazza: a zászlókat és a fájl mutatót. Nem több, mint OPEN_MAX fájlleírók. A fájl leíró táblázat szerkezete a következő:

Táblázat a nyitott fájlok

Ez tartalmaz rekordokat információt minden megnyitott fájlt. A bejegyzést az ebben a táblázatban tartjuk aktuális eltolás a fájlt, hogy használják az összes olvasási és írási műveletek a fájlt, és nyissa meg a fájlt (O_RDONLY, O_WRONLY vagy O_RDWR). A szerkezet a táblázat a nyitott fájlok a fájlban tárolt pointer offset. Ha az olvasási-írási művelet, a rendszer elvégzi az implicit mutató elmozdulás. Például, ha olvasása vagy írása byte x mutatót is költözött x bájt. Ha módosítani szeretné a kurzor pozícióját fájlok közvetlen hozzáférés vonatkozik keresik funkciót. Streaming fájlokat (például csövek és konnektorok), a koncepció az elmozdulás nem támogatott, mivel a véletlen elérésű fájl nem.

Management deszkriptorok fájlok

Mivel fájlokat képes kezelni több felhasználó, ez szükséges ahhoz, hogy a kapcsolódó folyamatok teljes elmozdulás a mutató és a független folyamatok - saját offset mutató egy fájlt. A fájl megnyitása táblázat bejegyzés tartalmaz egy fájlt számlálóját tükröző száma részleteknek megfelelő egy adott fájlt.

Több utalást a fájl lehet szükség a következő esetekben:

  • A fájl megnyitásakor még egy folyamat
  • A gyermek folyamat örökli fájlleírókkal megnyitott a szülő folyamat
  • fájlleíróból átmásolja a funkció fcntl vagy dup

Közös munka a megnyitott fájlokat

Minden lépésnél a nyitás a rekord hozzáadása az asztalhoz a megnyitott fájlokat. Ez biztosítja, hogy minden folyamat fog futni a mutatót a fájl. Ez a megközelítés lehetővé teszi, hogy fenntartsák az adatok integritását.

Másolásakor leíró két folyamatok kezdenek működni az azonos index. Ebben az esetben mindkét folyamat megpróbálhatja elérni a fájlt ugyanabban az időben, az adatok írása vagy olvasása nem következetes.

Vannak a következő módon másolja a fájlt leíró: a funkció dup vagy dup2. villa a funkciót, fcntl.

Funkciók dup és dup2

dup függvény létrehoz egy másolatot a fájl leíró. A másolat keletkezik az üres térben a felhasználói fájl leíró táblázat tartalmazza a forrás leíró. A dup lépésekben referencia száma a fájlt a fájl megnyitása táblázat bejegyzés és visszatér egy új fájlt leíró. dup2 funkció megkeresi a kért fogantyút és zárja a társított fájl, ha nyitva van. Segítségével megadhatja egy adott rekord a táblázat, amelyben a nyelet le lehet másolni.

A villa funkció

A villa függvény létrehoz egy gyermek folyamatot, amely örökli a fogantyúkat a szülő folyamat. Ezt követően a gyermek folyamat kezd egy új folyamatot. Örökölt leírások zászló szoros exec, szett fcntl. Ők lesznek zárva.

fcntl funkció

fcntl funkció lehetővé teszi, hogy működjön együtt az adatok fájl szerkezete és nyitott fájlleírók. Ez lehetővé teszi, hogy hajtsa végre a következő leíró:
  • Másolás a fájl leíró (azonos a dup funkció).
  • Get vagy beállított érték a zászló közel a exec.
  • Deszkriptorok kikapcsolási üzemmód a blokkokat.
  • Beleértve az adatokat felül mód a fájlt (O_APPEND).
  • Tartalmazza küldő folyamatok input-output felbontású jelet.
  • Állítsa be és kap a folyamat azonosítóját vagy eljárás csoport küldeni SIGIO.
  • Zárja be az összes fájlt leírásait.

Normál fájlleírókkal

Amikor futtatja a programot a shell nyit deszkriptoruk 0, 1 és 2. Alapértelmezésben vannak társítva az alábbi fájlokat:

Standard hiba üzenet.

Ezek fájlleírókkal társított terminál. Ez azt jelenti, hogy amikor adatok olvasására 0 file leíró programot fogad bemeneti terminál, és ha az adatok írása fájlleírókkal 1. és 2., azok megjelennek a terminálon. Ha megnyitjuk a többi fájlleírókkal rendelt növekvő sorrendben.

Ha a hozzáférési keresztül zajlik a szereplők <(знак меньше) или> (Nagyobb mint), a standard leírások kapcsolódó más fájlokat. Például a következő parancs köti fájlleírókkal 0 és 1, a szükséges fájlokat (alapértelmezés szerint ezek a leírások a terminálhoz csatlakozik).

Ebben a példában, leíró 0 lesznek társítva egy fájlt FileX, és egy 1 nyéllel - a fájl Filey. Leíró 2 nem fog változni. A program ahhoz, hogy tudja, hogy a fogantyú 0 a bemeneti fájl, és leírást az 1. és 2. - a kimeneti fájlokat. Információ milyen konkrét fájlokat címkékkel társított, akkor nem kell.

A következő példa mutatja a standard kimenet átirányítás program:

Ha a kérelem kézhezvételét a foglalunk le az első elérhető leírója leíró táblázat (leíró a legkisebb számú). Azonban a dup fájl funkciókat lehet rendelni bármilyen fogantyút.

Számának korlátozása fájlleírókkal