Mikä on tiedoston kuvaus?

Tiedoston kuvaus on numero, joka yksilöi yksilöllisesti avoimen tiedoston tietokoneen käyttöjärjestelmässä. Siinä kuvataan tietoresurssi ja miten resurssi voidaan käyttää.

Kun ohjelma pyytää avaamaan tiedoston - tai muun tietolähteen, kuten verkkopistokkeen - käyttöjärjestelmän ydin antaa pääsyn, tekee merkinnän globaalista tiedostotaulukosta ja toimittaa ohjelmiston kyseisen merkinnän sijaintiin.

Descriptor tunnistetaan ainutlaatuisella ei-negatiivisella kokonaisluvulla, kuten 0, 12 tai 567 . Järjestelmän jokaiselle avoimelle tiedostolle on olemassa ainakin yksi tiedoston kuvaus.

Tiedoston kuvauksia käytettiin ensin Unixissa, ja niitä käyttävät nykyaikaiset käyttöjärjestelmät, kuten Linux, MacOS X ja BSD. Microsoft Windowsissa tiedostojen kuvailijat tunnetaan tiedostotiedostoina.

  • Yleiskatsaus
  • Stdin, stdout ja stderr
  • Tiedoston kuvausten uudelleenohjaus

Kun prosessi tekee onnistuneen pyynnön avata tiedosto, ydin palauttaa tiedostojen deskriptorin, joka osoittaa ytimen yleisen tiedostotaulukon merkinnän. Tiedostotaulukon merkintä sisältää tietoja, kuten tiedoston sisääntulo, tavun siirtymä ja kyseisen tietovirran käyttörajoitukset (vain luku, vain kirjoitus jne.).

Stdin, stdout ja stderr

Unix-kaltaisessa käyttöjärjestelmässä ensimmäiset kolme tiedoston kuvausta ovat oletusarvoisesti STDIN (standarditulo), STDOUT (standardilähtö) ja STDERR (vakiovirhe).

NimiTiedoston kuvausKuvausLyhenne
Normaali tulo0Oletusarvo syötettä varten, esimerkiksi komentoputkistossa. Terminaalissa tämä on käyttäjän näppäimistön syöttö.stdin
Normaali lähtö1Tulostuksen oletusarvo, esimerkiksi kun komento tulostaa tekstiä. Päätelaitteessa tämä on käyttäjän näytön oletusarvo.stdout
Normaali virhe2Oletustietovirta tuotokselle, joka liittyy virheeseen. Päätelaitteessa tämä on käyttäjän näytön oletusarvo.stderr

Tiedoston kuvausten uudelleenohjaus

Tiedostojen kuvailijoita voidaan käyttää suoraan käyttämällä bash-ohjelmaa, joka on Linuxin, MacOS X: n ja Windows-osajärjestelmän oletuskuori.

Esimerkiksi, kun käytät etsintäkomentoa, onnistunut lähtö menee stdoutiin (tiedoston kuvaus 1 ), ja virheilmoitukset siirtyvät stderriin (tiedoston kuvaus 2 ). Molemmat virrat näkyvät päätelaitteena:

 etsi / -nimi '* jotain *' 
 / usr / share / doc / jotain / usr / share / doc / jotain / esimerkkejä / something_random löytää: `/ run / udisks2 ': Lupa kielletty:` / run / wpa_supplicant: Lupa evätty / usr / share / something / usr / pelit / jotain 

Saamme virheitä, koska löytää yrittää etsiä muutamia järjestelmähakemistoja, joilla ei ole lupaa lukea. Kaikki rivit, jotka sanovat "Luvan epäämisen", kirjoitettiin stderrille ja muut rivit kirjoitettiin stdoutiin .

Voit piilottaa stderrin ohjaamalla tiedoston deskriptorin 2 / dev / nulliin, joka on Linuxin erikoislaite, joka "ei mene missään":

 etsi / -nimi '* jotain *' 2> / dev / null 
 / usr / share / doc / jotain / usr / share / doc / jotain / esimerkkejä / something_random / usr / share / jotain / usr / pelejä / jotain 

Virheet on lähetetty osoitteeseen / dev / null, eikä niitä näytetä.

Stdoutin ja stderrin välisen eron ymmärtäminen on tärkeää, kun haluat työskennellä ohjelman lähdön kanssa. Jos esimerkiksi yrität hakea haun komennon lähdön, huomaat, että virheilmoituksia ei suodateta, koska vain vakiotuloste johdetaan grepiin .

 etsi / -nimi '* jotain *' | grep "jotain" 
 / usr / share / doc / jotain / usr / share / doc / jotain / esimerkkejä / something_random löytää: `/ run / udisks2 ': Lupa kielletty:` / run / wpa_supplicant': Lupa evätty / usr / share / something / usr / pelit / jotain 

Voit kuitenkin ohjata standardivirheen normaalilähtöön, ja sitten grep käsittelee molempien tekstin:

 etsi / -nimi '* jotain *' 2> & 1 | grep "jotain" 
 / usr / share / doc / jotain / usr / share / doc / jotain / esimerkkejä / something_random / usr / share / jotain / usr / pelejä / jotain 

Huomaa, että yllä olevassa komennossa kohdetiedoston kuvaus ( 1 ) on etukäteen merkkijonolla (" & "). Lisätietoja datavirran uudelleenohjauksesta on putkilinjoissa bash-kuoressa.

Esimerkkejä tiedostojen kuvausten luomisesta ja käyttämisestä bashissa, katso exec-sisäänrakennetut komennon esimerkit.

Tiedoston kahva, käyttöjärjestelmän ehdot