szabvány patakok
Ami a nyelvi fájlt a rendszer az elején a program automatikusan megnyitja a három forrásból. Ez szabvány bemenetről (standard input stream), stdout (normál kimenet), és stderr (standard hiba). Jellemzően, ezek a folyamatok irányítja a konzol, de támogató környezetben I / O átirányítás, akkor lehet átirányítja egy másik eszköz operációs rendszer. (I / O átirányítás támogatja, például operációs rendszerek, mint a Windows, DOS, UNIX, és az OS / 2).
Mivel a normál patakok rámutatnak a fájlt, akkor használja a nyelvet az I / O rendszer, valamint hogy teljesítse az I / O műveletek a konzolon. Például, putchar () meg lehet határozni az alábbiak szerint:
Általánosságban elmondható, hogy a stdin használt olvasni a konzolból, a stdout és stderr - felvétel konzolt.
A szerepe mutató stdin stream file. stdout és stderr lehet használni minden olyan funkciót, ahol a változó típusú FILE * használni. Például, tudjuk írni egy hívás fgets () a bemenet a konzol vonalon.
És valóban, az ilyen használat fgets () nagyon hasznos lehet. Amint azt ebben a könyvben, használja, hogy () nem zárja ki annak lehetőségét, hogy a tömb, hogy használják a fogadó felhasználói bemenetek karaktereket kell csomagolni. Ez azért lehetséges, mert az, hogy () nem ellenőrzi a hiányát határ megsértése. Egy hasznos alternatívája kap () a funkció fgets () a argumentum stdin. mivel ez a funkció korlátozza a karakterek számát olvassa, és így elkerülhető a túlfolyó a tömbben. Az egyetlen probléma a fgets (). Azt, hogy ez nem szünteti meg az új sor karakter (miközben kap () törli!), Ezért el kell távolítani „kézzel”, amint az az alábbi programot:
Azt felejtsük el, hogy stdin. stdout és stderr - ez nem a változók normális értelme, és lehetetlen, hogy rendeljen egy értéket fopen (). Sőt, éppen azért, mert ezek a mutatók fájlok automatikusan létrehozott elején a program, akkor automatikusan végén lezárják a munka. Annak érdekében, hogy ne próbálja meg bezárni.
Kommunikáció a konzol I / O
A C konzol és file input / output nem túlságosan különbözik egymástól. A funkciók a konzol I / O leírtak 8. fejezet elküldi az eredményeket működésének egyetlen szál - stdin és stdout. és valóban, mindegyik egy speciális változata a megfelelő fájl funkciót. A funkciók a konzol I / O is létezik, kényelmes volt a programozó.
Amint azt az előző részben, a bemeneti / kimeneti konzol is elvégezhető bármilyen fájlt a C nyelv funkció azonban lehet, hogy meglepetés legyen, vagyis az I / O műveletek a merevlemez segítségével végezhető el a konzol I / O funkciók, például , printf (). Az a tény, hogy az összes funkciót a konzol I / O, ami fejezetben tárgyaljuk 8. végzik ügyletek patakok stdin és stdout. A környezetek támogatása I / O átirányítás, ez felel meg a stdin és stdout átirányítható eltérő eszközhöz a billentyűzet vagy a képernyőn. Vegyük például a következő programot:
Tegyük fel, hogy ez a program az úgynevezett teszt. Végzése során a szokásos jelenik tip, majd így szól húr be a billentyűzetről, és végül, ez a szöveg jelenik meg. Azonban, olyan környezetben, amely támogatja az I / O átirányítás, egy vagy stdout stdin folyam (vagy mindkettő) átirányítható egy fájlba. Például a DOS vagy Windows környezetben fut következő TEST
Ez arra enged következtetni, hogy ez a program lesz írva, hogy a fájl neve kimenet. A következő futam TEST
irányítja stdin patak nevű fájlt INPUT, és a standard output - nevű fájlt kimenet.
Ha a C-program befejeztével minden átirányított folyik vissza az államok, amelyek alapértelmezés szerint telepítve.
Átirányítása szabvány folyamok: funkció freopen ()
Átirányítani a standard stream akkor a freopen (). Ez a funkció összeköti a meglévő áramot egy új fájlt. Tehát lehet, jól társítható az új fájlt, és a standard kimenetre. Itt látható a prototípus ezt a funkciót:
ahol a fájlnév - egy mutatót a fájl nevét szeretnénk társítani a patak által mutatott egy mutatót a patak. A fájl megnyílik a működési mód; Ez a paraméter vehet ugyanazokat az értékeket, mint a megfelelő paraméter a funkció fopen (). Ha freopen () függvény sikeres, akkor visszaadja a patak. és ha megfelel hiba -, akkor NULL.
Az alábbi program használatát szemlélteti freopen () függvény, hogy irányítsa át a szabványos kimenet folyamot stdout fájlba nevű kimenet.