Ero sivun ”EOF” versioiden välillä
pEi muokkausyhteenvetoa |
(laajennettu) |
||
Rivi 1: | Rivi 1: | ||
'''EOF''' eli '''loppumerkki''' on C-ohjelmoinnissa ja yleisesti Unix-järjestelmissä tiedoston lopusta kertova | '''EOF''' eli '''loppumerkki''' on C-ohjelmoinnissa ja yleisesti Unix-järjestelmissä tiedoston lopusta kertova erikoismerkki. Kun ohjelma lukee tiedostosta loppumerkin EOF, se tarkoittaa yleensä, että tiedoston loppu on saavutettu, eikä lisää tietoa ole enää saatavilla. | ||
== C-ohjelmoinnissa == | == C-ohjelmoinnissa == | ||
C-ohjelman kannalta tiedostot näkyvät [[tiedostokuvain|tiedostokuvaimina]] (engl. ''file descriptor''). Tiedostokuvaimesta, joka yleensä on liitetty tiedostoon, mutta voi olla liitetty myös johonkin [[standardivirta]]an tai [[putki|putkeen]], voi lukea tavuja standardikirjaston kutsulla ''fgetc()''. Kutsu palauttaa normaalisti tiedoston seuraavan 8-bittisen merkin, mutta mikäli tiedosto on lopussa tai lukemisessa tapahtuu virhe, kutsu palauttaa erikoisarvon EOF. EOF ei ole positiivinen 8-bittinen kokonaisluku (s.o. luku väliltä 0-255), vaan negatiivinen ''int'' -arvo. Näin mikään tiedosto ei voi sisältää merkkiä EOF, eikä sitä voi tallettaa tyyppiin ''unsigned char''. Siksi paluuarvo EOF on aina erikoistapaus. | C-ohjelman kannalta tiedostot näkyvät [[tiedostokuvain|tiedostokuvaimina]] (engl. ''file descriptor''). Tiedostokuvaimesta, joka yleensä on liitetty tiedostoon, mutta voi olla liitetty myös johonkin [[standardivirta]]an tai [[putki|putkeen]], voi lukea tavuja standardikirjaston kutsulla ''fgetc()''. Kutsu palauttaa normaalisti tiedoston seuraavan 8-bittisen merkin, mutta mikäli tiedosto on lopussa tai lukemisessa tapahtuu virhe, kutsu palauttaa erikoisarvon EOF. EOF ei ole positiivinen 8-bittinen kokonaisluku (s.o. luku väliltä 0-255), vaan negatiivinen ''int'' -arvo. Näin mikään tiedosto ei voi sisältää merkkiä EOF, eikä sitä voi tallettaa tyyppiin ''unsigned char''. Siksi paluuarvo EOF on aina erikoistapaus. | ||
C-ohjelman tulee aina erikseen varmistaa, merkitseekö EOF -paluuarvo todella tiedoston loppua | C-ohjelman tulee aina erikseen varmistaa, merkitseekö EOF -paluuarvo todella tiedoston loppua vaiko virhetilannetta kutsulla ''feof()'' tai ''ferror()''. | ||
== ASCII-loppumerkki 0x04 == | |||
Loppumerkkiä läheisesti muistuttaa ASCII-merkki 0x04 (End of Transmission). Vanhoissa järjestelmissä, kuten [[wikipedia:fi:CP/M|CP/M]] järjestelmä talletti jokaisen tiedoston osalta vain sille varattujen talletuslohkojen määrän. Mikäli tiedostoon tallennettu data loppui talletuslohkojen välissä, tiedoston lopusta kertoi erikoismerkki 0x04. Tälläinen tiedosto ei voi tietenkään sisältää muuaalla kontrollimerkkiä 0x04, joka aiheuttaisi vakavia ongelmia nykyisissä järjestelmissä, joiden levyille saatetaan tallettaa mm. salattua tai pakattua binääritietoa. Siksi termillä EOF viitataan nykyisin Linux- ja Unix järjestelmissä useimmiten negatiiviseen lukufunktion paluuarvoon EOF, joka ei voi vastata arvoltaan mitään aitoa merkkiä, esimerkiksi ASCII-kontrollimerkkiä. | |||
== Terminaalissa == | |||
Syötteen voi terminaalissa lopettaa antamalla erikoismerkin <tt>^D</tt>, joka PC-järjestelmissä tapahtuu painamalla Ctrl ja D kirjaimia samaan aikaan. | |||
[[Luokka:Järjestelmä]] | [[Luokka:Järjestelmä]] |
Versio 17. helmikuuta 2010 kello 01.42
EOF eli loppumerkki on C-ohjelmoinnissa ja yleisesti Unix-järjestelmissä tiedoston lopusta kertova erikoismerkki. Kun ohjelma lukee tiedostosta loppumerkin EOF, se tarkoittaa yleensä, että tiedoston loppu on saavutettu, eikä lisää tietoa ole enää saatavilla.
C-ohjelmoinnissa
C-ohjelman kannalta tiedostot näkyvät tiedostokuvaimina (engl. file descriptor). Tiedostokuvaimesta, joka yleensä on liitetty tiedostoon, mutta voi olla liitetty myös johonkin standardivirtaan tai putkeen, voi lukea tavuja standardikirjaston kutsulla fgetc(). Kutsu palauttaa normaalisti tiedoston seuraavan 8-bittisen merkin, mutta mikäli tiedosto on lopussa tai lukemisessa tapahtuu virhe, kutsu palauttaa erikoisarvon EOF. EOF ei ole positiivinen 8-bittinen kokonaisluku (s.o. luku väliltä 0-255), vaan negatiivinen int -arvo. Näin mikään tiedosto ei voi sisältää merkkiä EOF, eikä sitä voi tallettaa tyyppiin unsigned char. Siksi paluuarvo EOF on aina erikoistapaus.
C-ohjelman tulee aina erikseen varmistaa, merkitseekö EOF -paluuarvo todella tiedoston loppua vaiko virhetilannetta kutsulla feof() tai ferror().
ASCII-loppumerkki 0x04
Loppumerkkiä läheisesti muistuttaa ASCII-merkki 0x04 (End of Transmission). Vanhoissa järjestelmissä, kuten CP/M järjestelmä talletti jokaisen tiedoston osalta vain sille varattujen talletuslohkojen määrän. Mikäli tiedostoon tallennettu data loppui talletuslohkojen välissä, tiedoston lopusta kertoi erikoismerkki 0x04. Tälläinen tiedosto ei voi tietenkään sisältää muuaalla kontrollimerkkiä 0x04, joka aiheuttaisi vakavia ongelmia nykyisissä järjestelmissä, joiden levyille saatetaan tallettaa mm. salattua tai pakattua binääritietoa. Siksi termillä EOF viitataan nykyisin Linux- ja Unix järjestelmissä useimmiten negatiiviseen lukufunktion paluuarvoon EOF, joka ei voi vastata arvoltaan mitään aitoa merkkiä, esimerkiksi ASCII-kontrollimerkkiä.
Terminaalissa
Syötteen voi terminaalissa lopettaa antamalla erikoismerkin ^D, joka PC-järjestelmissä tapahtuu painamalla Ctrl ja D kirjaimia samaan aikaan.