[Powered by Google Translate] TOMMY: Ebben a videóban, akkor megtudjuk,
átirányítása és a csövek.
Eddig mi már a funkciók, mint a printf
kimeneti adatok a terminál és a funkciók, mint a getString
, hogy lehetővé tegye a felhasználó számára, hogy a mi hogy járuljon
program segítségével a billentyűzetet.
Menjünk gyorsan vessünk egy pillantást a program, hogy lesz egy sor
bemenet a felhasználó, és azután kiadja azt.
>> On line 7, mi a felhasználó megkérdezése egy string, és
majd line 8, mi nyomtatás vissza ki.
Nézzük fordításához és futtatásához a programot.
Remek.
A string amit átadott visszhangozta vissza
nekünk a terminálon.
Ez azért történt, mert a printf függvény írt egy
áram a Standard ki, vagy az S-terc-d-ki.
Ha valami van írva az stdout-ra, ez alapértelmezés szerint
jelenik meg a terminál.
>> Szóval ez mind szép és jó, de mi van, ha ahelyett, hogy egyszerűen
megjelenítő string, akartuk menteni egy fájlba?
Például, lehet, hogy emlékszik pontosan, mi a
program volt, amikor adott neki egy bizonyos input később.
Az egyik lehetőség az lenne, ha ezt a mi C program segítségével
néhány speciális funkciók írásban fájlokat, hogy mi lesz
lásd másik videó.
Még egyszerűbb, bár az lenne, hogy valahogy
átirányítás stdout fájlba.
Így, amikor a printf ír stdout, a tartalom lesz
kell egy fájlba helyett
jelenik meg a terminál.
Meg tudjuk csinálni csak, hogy hozzáadásával nagyobb-mint jel, majd
egy fájl nevét, a parancs használjuk végrehajtani a programot.
>> Tehát ahelyett, hogy egyszerűen végrehajtó. / Redirect tudjuk
fuss. / redirect, majd egy nagyobb jel, majd a
filename, mint fájl.txt.
Lássuk, mi történik.
OK.
Figyeljük meg, hogy ebben az időben, semmi sem jelenik meg a terminál,
de nem módosították a tartalmát a
C program egyáltalán.
Nézzük most vizsgálja meg a tartalmát könyvtár ls.
>> Rendben van.
Most már van egy új fájlt a mi nevű könyvtárba file.txt,
amely a fájl neve is szállított, amikor futott a
Átirányítás program.
Nyissuk ki file.txt.
És itt, azt láthatjuk, hogy a stdout az átirányítás volt
a fájlba nevű file.txt.
Szóval futtassa az előző parancs újra, de ellátása
különböző bemeneti ebben az időben.
Oké.
Vessünk egy pillantást file.txt most.
>> Láthatjuk itt, hogy a fájl már felülírt, így a
eredeti bemenet nincs ott többé.
Ha ehelyett szeretnénk hozzáfűzni, hogy ezt a fájlt, amivel az új
input alatt a létező fájl tartalmát, tudjuk
használni a két nagyobb, mint a jelek egy helyett.
Próbáljuk ezt.
Most, ha nyitunk file.txt ismét azt látjuk, mind a mi
bemeneti vonalak.
Bizonyos esetekben talán szeretnénk elvetéséhez
kimenete a program.
Ahelyett, hogy írja a kimenetet egy fájlba, majd törli
a fájlt, ha végeztünk vele, tudunk írni egy speciális
fájl neve / dev / null.
Ha valami van írva, hogy / dev/null--
vagy csak devnull rövid -
akkor az automatikusan elveti.
Szóval szerintem a devnull, mint egy fekete lyuk az adatokat.
>> Tehát most láttuk, hogy a nagyobb jel lehet átirányítani
stdout, lássuk, hogyan tudjuk irányítani szabvány -
vagy az S-terc-d-in -
Az analóg stdout.
Míg a funkciók, mint a printf írj a patak neve
stdout, getString és hasonló funkciók olvasni a patak
nevű stdin, amely alapértelmezés szerint a patak
beírt karakterek a billentyűzeten.
Mi lehet átirányítani stdin a kisebb jel, majd
egy fájlnevet.
Most ahelyett, hogy a felhasználó megkérdezése a bemenet a
terminál, a program megnyitja a fájlt, amit megadott, és használja
a vonalak bemenet.
>> Lássuk, mi történik.
Remek.
Az első sor a file.txt lett nyomtatva a terminálra
mert mi hív getString egyszer.
Ha még egy hívást a getString a mi programban, a
következő sor file.txt volna használják
input e hívást.
Ismét mi nem módosítottuk C program egyáltalán.
Mi csak a változó, hogyan futtatni.
És ne feledd, még nem átirányított stdout ebben az időben,
így a program kimenete még
jelenik meg a terminálon.
Tudjuk, persze, átirányítás mindkét stdin
és stdout kedveli ezt.
Most file2.txt tartalmazza az első sorban a file.txt.
>> Szóval, ezekkel a szereplők, mi már tud olvasni, és
levelet szöveges fájlokat.
Most lássuk, hogyan tudjuk használni a kimenet egy program
a bemenet egy másik program.
Tehát itt egy egyszerű C program I
már itt az úgynevezett hello.c.
Mint látható, ez egyszerűen kimenetek "Hi
ott! "a felhasználó számára.
Ha akarom átirányítást használni input a kimenő hello -
Egy másik program -
Tudtam elsőnek a stdout a hello nevű fájlt
bemenet.txt, majd irányítsa át a stdin az átirányítás ugyanezen
file - bemenet.txt.
Szóval én tehetek. / Hello> bemenet.txt.
Nyomja meg az Enter végrehajtani ezt.
Majd. / Redirect <
bemenet.txt, és végrehajtja azt.
Így tudjuk rövidíteni ezt egy kicsit pontosvesszővel, amely lehetővé teszi
számunkra, hogy fut két vagy több parancs ugyanabban a sorban.
Így azt mondhatom,. / Hello> bemenet.txt, pontosvessző,
. / Redirect <bemenet.txt.
>> Szóval ez működik, de még mindig úgy érzi, nagyon nem elegáns.
Úgy értem, valóban szükségünk van ezen közvetítő szöveges fájl, ami
többé nincs szükség után átirányítás fut?
Szerencsére tudjuk kerülni ezt a külön szöveges fájlt mi
hívott egy cső.
Ha azt mondom,. / Hello |. / Átirányítást, akkor a stdout a
A program a bal oldalon -
ebben az esetben, szia -
fogják használni, mint a standard bemenet a
program a jobb oldalon.
Ebben az esetben a átirányítás. Szóval futtatásához.
>> Ott vagyunk.
Láthatjuk, hogy a kimenete helló használtunk a bemenő
az átirányítás.
Azáltal kikötés parancsokat használó tömlők alkotunk mi
úgynevezett csővezeték, hiszen a kimenet lényegében mozog
sorozatán keresztül parancsokat.
A csövek, tehetünk néhány jó dolgot, anélkül, hogy
írjon semmilyen kódot egyáltalán.
Például, tegyük fel, szeretnénk tudni, hogy hány fájl
belül ezt a könyvtárat.
Egy cső, tudjuk kombinálni az ls parancsot a wc -
vagy wordcount -
parancsot.
Ls kiírja minden fájl a könyvtárban az stdout-ra, és a
wc elmondja nekünk, hogy hány sorban kaptak, hogy ez keresztül stdin.
Tehát, ha azt mondjuk, hogy ls | wc-l -
ellátó-l kapcsolót a wc mondani, hogy számít vonalak -
láthatjuk, hogy pontosan hány fájlok
az aktuális könyvtárban.
>> Szóval vessünk egy pillantást még egy példát.
Van itt egy nevű fájlt students.txt,
egy listát a nevek.
Azonban ezek a nevek nem tetszőleges sorrendben az egészet, és úgy néz ki
mint néhány nevet ismétlődnek.
Amit mi akarunk, az a lista egyedi nevek ábécé
érdekében, egy fájlba nevű final.txt.
Tudtuk, persze, írd C program ezt nekünk.
De ez lesz, hogy szükségtelenül
összetett elég gyorsan.
Nézzük inkább a csövek használatának és néhány beépített-tools megoldani
ezt a problémát.
>> Az első dolog, amit meg kell tennie, hogy olvassa el a fájlt students.txt.
A macska parancs nem csak ezt.
Ez fogja olvasni a megadott fájlt, és levelet
annak tartalmát az stdout-ra.
Miután elolvasta a szöveges fájl, akkor
szeretné rendezni a neveket.
A sort parancs képes kezelni ezt nekünk.
Sort kiírja a vonal útján szolgáltatott stdin az stdout-ra
rendezetten.
Annak érdekében, hogy a kínálat a tartalmát students.txt a
sort a stdin, tudtuk használni a csövet, hogy összekapcsolják a macska-és sort.
Szóval végre tud hajtani cat students.txt | sort és
nyomja meg az Entert.
És most látjuk a tartalmát students.txt ben
betűrendben.
>> Szóval egy újabb parancs -
uniq, vagy egyedi -
a mi csővezeték.
Mint azt sejteni lehet, uniq, amikor szállított rendezett sorozata
vonalak keresztül stdin, kiírja az egyedi sorokat.
Tehát most már macska students.txt
| Sort | uniq.
Végül menthetjük a kimenetet a csővezeték egy
fájl elküldése cat students.txt | sort | uniq
> Final.txt.
Tehát, ha nyit final.txt, mi pontosan mi voltunk
Keresés:
listáját egyedi nevek betűrendben,
mentett egy szöveges fájl.
By the way, mi is mondhattam volna sort <
students.txt | uniq> final.txt, hogy pontosan
ugyanaz a dolog, felhasználva az egyes szereplők láttunk
ezt a videót.
>> A nevem Tommy, és ez CS50.