deskriptoru Souboru

Aktualizováno: 03/13/2021 do Počítače, Doufám, že

popisovače Souboru obrázku

popisovač souboru je číslo, které jednoznačně identifikuje otevřený soubor v operačním systému počítače. Popisuje datový zdroj a způsob přístupu k tomuto zdroji.

když program požádá o otevření souboru – nebo jiného datového zdroje, jako je síťový socket-jádro:

  1. uděluje přístup.
  2. vytvoří položku v globální tabulce souborů.
  3. poskytuje softwaru umístění této položky.

deskriptor je identifikován jedinečným nezáporným celým číslem, například 0, 12 nebo 567. Pro každý otevřený soubor v systému existuje alespoň jeden deskriptor souboru.

deskriptory souborů byly poprvé použity v Unixu a používají je moderní operační systémy včetně Linuxu, macOS a BSD. V systému Microsoft Windows jsou deskriptory souborů známé jako popisovače souborů.

Přehled

Když proces je úspěšný požadavek na otevření souboru, jádro se vrátí popisovač souboru, který ukazuje na záznam v jádru globální tabulky souborů. Soubor, záznam v tabulce obsahuje informace, jako je například inode souboru, byte offset, a omezení přístupu pro daný datový tok (pouze pro čtení, pouze pro zápis, atd.).

Souboru deskriptoru diagram

Stdin, stdout, a stderr

Na Unix-like operační systém, první tři popisovačů souboru, ve výchozím nastavení, jsou STDIN (standardní vstup), STDOUT (standardní výstup) a STDERR (standardní chyba).

Jméno deskriptoru Souboru Popis Zkratka
Standardní vstup 0 výchozí datový proud pro vstup, například v příkazovém potrubí. V terminálu je výchozí hodnota vstupu z klávesnice od uživatele. stdin
Standardní výstup 1 výchozí datový proud pro výstup, například, když příkaz vytiskne text. V terminálu je toto výchozí nastavení na obrazovce uživatele. stdout
Standardní chyba 2 výchozí datový proud pro výstup, který se vztahuje k chybě. V terminálu je toto výchozí nastavení na obrazovce uživatele. stderr

Přesměrování popisovače souboru

Soubor deskriptorů může být přímo přístupné pomocí bash, default shell pro Linux, macOS X a Windows Subsystém pro Linux.

například, když použijete příkaz najít, úspěšný výstup jde na standardní výstup (deskriptor souboru 1), a chybové zprávy, jít na stderr (deskriptor souboru 2). Oba proudy se zobrazí jako výstup na terminál:

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

dostáváme se chyby, protože najít se snaží hledat několik adresářů systému, že nemáme oprávnění ke čtení. Všechny řádky, které říkají „povolení odepřeno“, byly zapsány do stderr, a ostatní řádky byly zapsány do stdout.

můžete skrýt tím, že přesměruje stderr deskriptor souboru 2 do /dev/null, speciální zařízení v Linuxu, že „nikam nevede“:

find / -name '*something*' 2>/dev/null
/usr/share/doc/something/usr/share/doc/something/examples/something_random/usr/share/something/usr/games/something

chyby poslal do /dev/null, a nejsou zobrazeny.

pochopení rozdílu mezi stdout a stderr je důležité, pokud chcete pracovat s výstupem programu. Pokud se například pokusíte grep výstup příkazu Najít, všimnete si, že chybové zprávy nejsou filtrovány, protože pouze standardní výstup je potrubím do grep.

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

Nicméně, můžete přesměrovat standardní chybový na standardní výstup, a pak grep bude zpracovávat text:

find / -name '*something*' 2>&1 | grep 'something'
/usr/share/doc/something/usr/share/doc/something/examples/something_random/usr/share/something/usr/games/something

Všimněte si, že v příkazu výše, cílový soubor deskriptor (1) je předponou s ampersand („&“). Pro více informací o přesměrování datového toku, viz potrubí v bash shellu.

příklady vytváření a používání deskriptorů souborů v bash naleznete v našich příkladech příkazů Exec builtin.

popisovač souborů, podmínky operačního systému

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.