fájlleíró

Frissítve: 03/13/2021 by Computer Hope

fájlleírók illusztráció

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:

  1. hozzáférést biztosít.
  2. létrehoz egy bejegyzést a globális fájltáblában.a
  3. 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.).

fájlleíró diagram

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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.