File descriptor

Updated: 03/13/2021 by Computer Hope

File descriptors illustration

a file descriptors is a number that uniqually identifying a open file in a computer ’ s operating system. Siinä kuvataan tietoresurssia ja sitä, miten kyseistä resurssia voidaan käyttää.

kun ohjelma pyytää avaamaan tiedoston — tai muun dataresurssin, kuten verkkopistokkeen — ydin:

  1. myöntää pääsyn.
  2. luo merkinnän globaaliin tiedostotaulukkoon.
  3. ilmoittaa ohjelmistolle kyseisen merkinnän sijainnin.

asiasana yksilöidään yksikäsitteisellä ei-negatiivisella kokonaisluvulla, kuten 0, 12 tai 567. Jokaista järjestelmän avointa tiedostoa kohden on olemassa vähintään yksi tiedostokuvaaja.

Tiedostokuvauksia käytettiin ensimmäisen kerran Unixissa, ja niitä käyttävät nykyaikaiset käyttöjärjestelmät kuten Linux, macOS ja BSD. Microsoft Windowsissa tiedostokuvaajia kutsutaan tiedostokahvoiksi.

yleiskatsaus

kun prosessi pyytää onnistuneesti tiedoston avaamista, ydin palauttaa tiedostokuvauksen, joka viittaa ytimen globaalissa tiedostotaulukossa olevaan tietueeseen. Tiedostotaulukossa on tietoja, kuten tiedoston inodi, tavun siirtymä ja kyseisen datavirran pääsyrajoitukset (vain luku, vain kirjoitus jne.).

Tiedostokuvauskaavio

Stdin, stdout ja stderr

Unixin kaltaisessa käyttöjärjestelmässä kolme ensimmäistä tiedostokuvausta ovat oletuksena STDIN (standard input), STDOUT (standard output) ja STDERR (standard Error).

Name File descriptor Description lyhenne
Standardisyöte 0 syötön oletusdatavirta, esimerkiksi komentoputkistossa. Päätelaitteessa tämä oletusarvo on käyttäjän näppäimistösyöttö. stdin
Standardituloste 1 lähtötiedon oletusvirta, esimerkiksi komennon tulostaessa tekstiä. Päätteessä tämä oletusarvo siirtyy käyttäjän näytölle. stdout
keskivirhe 2 tulosteen oletustietovirta, joka liittyy tapahtuneeseen virheeseen. Päätteessä tämä oletusarvo siirtyy käyttäjän näytölle. stderr

Uudelleenohjaamalla tiedostokuvauksia

Tiedostokuvauksia voidaan käyttää suoraan käyttämällä bashia, Linuxin oletuskuorta, macOS X: ää ja Linuxin Windows-alijärjestelmää.

esimerkiksi, kun käytät etsi-komentoa, onnistunut ulostulo menee stdoutiin (tiedostokuvaus 1) ja virheilmoitukset menevät stderr: iin (tiedostokuvaus 2). Molemmat streamit näkyvät päätepisteenä:

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

saamme virheitä, koska find yrittää etsiä muutamia järjestelmähakemistoja, joita meillä ei ole lupaa lukea. Kaikki rivit, joissa lukee ”Permission denied”, kirjoitettiin stderrille ja muut rivit stdoutille.

stderr: n voi piilottaa ohjaamalla tiedostokuvauksen 2 Linuxin erikoislaitteeseen/dev/null, joka ”ei mene minnekään”:

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

virheet, jotka lähetetään/dev / null: iin, ja joita ei näytetä.

Stdoutin ja stderr: n eron ymmärtäminen on tärkeää, kun haluat työskennellä ohjelman ulostulolla. Jos esimerkiksi yrität käyttää Etsi-komennon tulostetta grep, huomaat, että virheilmoituksia ei suodateta, koska vain vakiotuloste johdetaan grep: hen.

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

voidaan kuitenkin ohjata keskivirhe vakiotulosteeseen, jolloin grep käsittelee molempien tekstin:

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

huomaa, että yllä olevassa komennossa kohdetiedoston kuvaaja (1) etuliitteenä on Ampersand (”&”). Lisätietoja datavirran uudelleenohjauksesta on Bash-komentotulkin putkistoissa.

esimerkkejä tiedostojen kuvaajien luomisesta ja käyttämisestä Bashissa, katso exec builtin-komentoesimerkit.

Tiedostokahva, Käyttöjärjestelmätermit

Vastaa

Sähköpostiosoitettasi ei julkaista.