File deskriptor

uppdaterad: 03/13/2021 av Computer Hope

file deskriptorer illustration

en fil deskriptor är ett nummer som unikt identifierar en öppen fil i en dators operativsystem. Den beskriver en dataresurs och hur den resursen kan nås.

när ETT program ber om att öppna en fil — eller en annan dataresurs, som ett nätverksuttag — ger kärnan:

  1. åtkomst.
  2. skapar en post i den globala filtabellen.
  3. tillhandahåller programvaran platsen för den posten.

deskriptorn identifieras med ett unikt icke-negativt heltal, såsom 0, 12 eller 567. Det finns minst en filbeskrivning för varje öppen fil på systemet.

filbeskrivningar användes först i Unix och används av moderna operativsystem inklusive Linux, macOS och BSD. I Microsoft Windows kallas filbeskrivningar som filhandtag.

översikt

När en process gör en lyckad begäran om att öppna en fil, returnerar kärnan en filbeskrivning som pekar på en post i kärnans globala filtabell. Filtabellposten innehåller information som filens inode, byte-offset och åtkomstbegränsningarna för den dataströmmen (skrivskyddad, skrivskyddad, etc.).

filbeskrivningsdiagram

Stdin, stdout och stderr

på ett Unix-liknande operativsystem är de tre första filbeskrivarna som standard STDIN (standard input), STDOUT (standard output) och STDERR (standard error).

namn Filbeskrivning beskrivning förkortning
standardinmatning 0 standarddataströmmen för inmatning, till exempel i en kommandopipeline. I terminalen är detta standard för TANGENTBORDSINMATNING från användaren. stdin
Standardutgång 1 standarddataströmmen för utmatning, till exempel när ett kommando skriver ut text. I terminalen är detta standard för användarens skärm. stdout
standardfel 2 standarddataströmmen för utdata som hänför sig till ett fel som inträffar. I terminalen är detta standard för användarens skärm. stderr

omdirigera filbeskrivningar

filbeskrivningar kan nås direkt med bash, standardskalet för Linux, macOS X och Windows-delsystem för Linux.

När du till exempel använder kommandot Sök går lyckad utmatning till stdout (filbeskrivning 1) och felmeddelanden går till stderr (filbeskrivning 2). Båda strömmarna visas som terminalutgång:

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

vi får fel eftersom find försöker söka i några systemkataloger som vi inte har behörighet att läsa. Alla rader som säger” tillstånd nekad ” skrevs till stderr, och de andra raderna skrevs till stdout.

Du kan dölja stderr genom att omdirigera filbeskrivning 2 till/dev / null, den speciella enheten i Linux som ”går ingenstans”:

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

fel som skickas till /dev/null, och visas inte.

att förstå skillnaden mellan stdout och stderr är viktigt när du vill arbeta med ett program. Om du till exempel försöker greppa utmatningen från kommandot Sök märker du att felmeddelandena inte filtreras, eftersom endast standardutmatningen leds till 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

Du kan dock omdirigera standardfel till standardutmatning, och sedan kommer grep att bearbeta texten till båda:

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

Lägg märke till att i kommandot ovan är målfilbeskrivaren (1) prefixad med ett Ampersand (”&”). Mer information om omdirigering av dataström finns i rörledningar i Bash-skalet.

För exempel på att skapa och använda filbeskrivningar i bash, se våra exec inbyggda kommandoexempel.

filhandtag, termer för operativsystem

Lämna ett svar

Din e-postadress kommer inte publiceras.