a fájlleíró egy olyan szám, amely egyedileg azonosítja a megnyitott fájlt a számítógép operációs rendszerében. Leírja az adatforrást, és azt, hogy az erőforrás hogyan érhető el.
amikor egy program egy fájl — vagy egy másik adatforrás, például egy hálózati aljzat-megnyitását kéri, a kernel:
- hozzáférést biztosít.
- létrehoz egy bejegyzést a globális fájltáblában.a
- megadja a szoftvernek a bejegyzés helyét.
a leírót egy egyedi, nem negatív egész szám azonosítja, például 0, 12 vagy 567. A rendszer minden megnyitott fájljához legalább egy fájlleíró létezik.a
Fájlleírókat először Unix-ban használták, és a modern operációs rendszerek használják, beleértve a Linuxot, a macOS-t és a BSD-t. A Microsoft Windows rendszerben a fájlleírók fájlkezelőként ismertek.
áttekintés
amikor egy folyamat sikeres kérést tesz egy fájl megnyitására, a kernel visszaad egy fájlleírót, amely a kernel globális fájltáblájának egyik bejegyzésére mutat. A fájltábla bejegyzés olyan információkat tartalmaz, mint a fájl inode-ja, a bájteltolás, valamint az adott adatfolyam hozzáférési korlátozásai (csak olvasható, csak írható stb.).
Stdin, stdout és stderr
Unix-szerű operációs rendszeren az első három fájlleíró alapértelmezés szerint STDIN (standard input), STDOUT (standard output) és STDERR (standard error).
név | fájlleíró | leírás | rövidítés |
---|---|---|---|
szabványos bemenet | 0 | az alapértelmezett adatfolyam a bemenethez, például egy parancsfolyamatban. A terminálon ez alapértelmezés szerint a felhasználó billentyűzetbevitele. | stdin |
Standard kimenet | 1 | a kimenet alapértelmezett adatfolyama, például amikor egy parancs szöveget nyomtat. A terminálon ez alapértelmezés szerint a felhasználó képernyője. | stdout |
Standard hiba | 2 | a kimenet alapértelmezett adatfolyama, amely egy előforduló hibához kapcsolódik. A terminálon ez alapértelmezés szerint a felhasználó képernyője. | stderr |
fájlleírók átirányítása
a fájlleírók közvetlenül elérhetők a Bash használatával, amely a Linux, a macOS X és a Windows alrendszer alapértelmezett héja Linux alatt.
például a keresés parancs használatakor a sikeres kimenet az stdout (fájlleíró 1), a hibaüzenetek pedig az stderr (fájlleíró 2). Mindkét adatfolyam terminál kimenetként jelenik meg:
find / -name '*something*'
/usr/share/doc/something/usr/share/doc/something/examples/something_randomfind: `/run/udisks2': Permission deniedfind: `/run/wpa_supplicant': Permission denied/usr/share/something/usr/games/something
hibákat kapunk, mert a find néhány olyan rendszerkönyvtárban próbál keresni, amelyek olvasására nincs engedélyünk. Az összes sort, amely azt mondja, hogy “engedély megtagadva”, az stderr-nek írták, a többi sort pedig az stdout-nak.
az stderr elrejthető a 2. fájlleíró átirányításával a /dev/null-ra, a Linux speciális eszközére, amely “nem megy sehova”:
find / -name '*something*' 2>/dev/null
/usr/share/doc/something/usr/share/doc/something/examples/something_random/usr/share/something/usr/games/something
a /dev/null-ba küldött hibák nem jelennek meg.
az stdout és az stderr közötti különbség megértése fontos, ha EGY program kimenetével szeretne dolgozni. Például, ha megpróbálja grepelni a find parancs kimenetét, észreveszi, hogy a hibaüzenetek nem lesznek szűrve, mert csak a szokásos kimenetet vezetik a grep-be.
find / -name '*something*' | grep 'something'
/usr/share/doc/something/usr/share/doc/something/examples/something_randomfind: `/run/udisks2': Permission deniedfind: `/run/wpa_supplicant': Permission denied/usr/share/something/usr/games/something
a szabványos hibát azonban átirányíthatja a szabványos kimenetre, majd a grep feldolgozza mindkettő szövegét:
find / -name '*something*' 2>&1 | grep 'something'
/usr/share/doc/something/usr/share/doc/something/examples/something_random/usr/share/something/usr/games/something
vegye figyelembe, hogy a következő esetekben a a fenti parancs, a célfájl leíró (1) előtagja egy Ampersand (“&”). Az adatfolyam-átirányítással kapcsolatos további információkért lásd: csővezetékek a bash héjban.
a Bash fájlleírók létrehozására és használatára vonatkozó példákat lásd az exec builtin parancs példáin.
fájlkezelő, operációs rendszer kifejezések