File descriptor

Oppdatert: 03/13/2021 By Computer Hope

file descriptors illustration

en file descriptor er et tall som unikt identifiserer en åpen fil i datamaskinens operativsystem. Den beskriver en dataressurs, og hvordan denne ressursen kan nås.

når et program ber om å åpne en fil — eller en annen dataressurs, som en nettverkskontakt — gir kjernen:

  1. tilgang.
  2. Oppretter en oppføring i den globale filtabellen.
  3. Gir programvaren med plasseringen av denne oppføringen.

beskrivelsen identifiseres med et unikt ikke-negativt heltall, for eksempel 0, 12 eller 567. Det finnes minst en filbeskrivelse for hver åpen fil på systemet.Filbeskrivelser ble først brukt I Unix, og brukes av moderne operativsystemer, Inkludert Linux, macOS og BSD. I Microsoft Windows er filbeskrivelser kjent som filhåndtak.

Oversikt

når en prosess gjør en vellykket forespørsel om å åpne en fil, returnerer kjernen en filbeskrivelse som peker til en oppføring i kjernens globale filtabell. Filtabelloppføringen inneholder informasjon som inoden til filen, byteforskyvning og tilgangsbegrensningene for den datastrømmen(skrivebeskyttet, skrivebeskyttet osv.).

filbeskrivelsesdiagram

Stdin, stdout og stderr

på Et Unix-lignende operativsystem er DE tre første filbeskrivelsene SOM standard STDIN (standard input), STDOUT (standard output) og STDERR (standard error).

Navn Filbeskrivelse Forkortelse
Standardinngang 0 standard datastrøm for inndata, for eksempel i en kommandorørledning. I terminalen er dette standard for tastaturinngang fra brukeren.
Standard utgang 1 standard datastrøm for utdata, for eksempel når en kommando skriver ut tekst. I terminalen er dette standard på brukerens skjerm. stdout
Standardfeil 2 standard datastrøm for utdata som er relatert til en feil som oppstår. I terminalen er dette standard på brukerens skjerm. stderr

Omdirigering av filbeskrivelser

Filbeskrivelser kan nås direkte ved hjelp av bash, standardskallet Til Linux, macOS X og Windows-Delsystem For Linux.

når du for eksempel bruker finn-kommandoen, går vellykket utgang til stdout (file descriptor 1), og feilmeldinger går til stderr (file descriptor 2). Begge strømmene vises som terminalutgang:

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 feil fordi find prøver å søke i noen systemkataloger som vi ikke har tillatelse til å lese. Alle linjene som sier «Tillatelse nektet» ble skrevet til stderr, og de andre linjene ble skrevet til stdout.

du kan skjule stderr ved å omdirigere file descriptor 2 til /dev / null, den spesielle enheten I Linux som «går ingensteds»:

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

feilene sendt til /dev/null, og vises ikke.Forstå forskjellen mellom stdout og stderr er viktig når du vil arbeide med et program utgang. Hvis du for eksempel prøver å gripe utdataene fra finn-kommandoen, vil du legge merke til at feilmeldingene ikke filtreres, fordi bare standardutgangen sendes til 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 imidlertid omdirigere standardfeil til standardutgang, og deretter grep vil behandle teksten til begge:

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

Legg merke til at i kommandoen ovenfor er målfilbeskrivelsen (1) prefikset med en ampersand («&»). Hvis du vil ha mer informasjon om omadressering av datastrøm, kan du se rørledninger i bash-skallet.

for eksempler på å lage og bruke filbeskrivelser i bash, se våre exec builtin command eksempler.

filhåndtak, Vilkår For Operativsystem

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.