[Powered by Google Translate] TOMMY: V tem video bomo spoznali
preusmerjanje in cevi.
Do sedaj smo bili z uporabo funkcij, kot so printf, da
iznos podatkov na terminalu in funkcije, kot so GetString
da se omogoči uporabniku, da se zagotovi prispevek k naši
Program tipkovnico.
Naj hitro si oglejte program, ki dobi linijo
vnos od uporabnika in ga oddaja.
>> Na liniji 7, česar smo si za vrvico, in
nato pa na liniji 8, smo ga natisnili nazaj.
Naj pripravijo in vodijo naš program.
Čudovito.
Niz smo zagotavljali je ponovil nazaj
nam na terminalu.
To se je zgodilo zato, ker printf funkcija je pisal
Tok imenuje standardni ven, ali s-t-d-out.
Ko je nekaj napisal, da stdout, je privzeto
prikazana na terminalu.
>> Tako, da je vse lepo in prav, toda kaj, če se, namesto da bi
prikazuje niz, smo želeli, da jo shranite v datoteko?
Na primer, želimo, da se spomnimo, kaj naše
Program naredili, ko smo ji dali poseben vhod kasneje.
Ena od rešitev bi bila, da to stori v našem programu C, pri čemer
nekatere posebne funkcije za pisanje v datoteke, ki jih bomo
glej v drugem videu.
Še lažje, čeprav bi bilo nekako
preusmerite stdout v datoteko.
Na ta način, ko printf piše v stdout, bo vsebina
zapišemo v datoteko namesto
prikazana na terminalu.
To lahko storimo le, da z dodajanjem več, kot znak, ki mu sledi
z imenom datoteke, z ukazom, ki jih uporabljamo za izvedbo našega programa.
>> Torej, ne samo izvedbo. / Preusmeriti, lahko
teči. / preusmeriti, nato pa več kot znak, ki mu sledi
Ime datoteke, kot datoteka.txt.
Poglejmo, kaj se zgodi.
OK.
Opazili boste, da tokrat ni bilo nič prikazan na terminalu,
vendar nismo spremenili vsebino našega
C program sploh.
Pojdimo zdaj preučiti vsebino te mape, ls.
>> V redu.
Zdaj imamo novo datoteko v naš imenik, imenovan datoteka.txt,
ki je ime datoteke imamo na voljo, ko sva tekla naši
Preusmeritev programa.
Odprimo se datoteka.txt.
In tukaj lahko vidimo, da je stdout preusmerili od bila
zapišejo v datoteko z imenom datoteka.txt.
Torej, kaj je teči prejšnji ukaz še enkrat, ampak zagotavljanje
različne vhodne tokrat.
Ok.
Oglejmo si na datoteka.txt zdaj.
>> Tukaj lahko vidimo, da je bila datoteka prepisana, zato so naši
prvotni vhod ni več tam.
Če bomo namesto želite dodati v to datoteko, s čimer novi
Vhod v nadaljevanju obstoječe vsebine spisa, smo lahko
uporabite dve večji, kot znake, namesto samo enega.
Poskusimo to.
Zdaj, če smo odprli datoteka.txt spet vidimo, tako naših
vhodne vrstice.
V nekaterih primerih lahko želimo izločiti vse
Rezultat našega programa.
Namesto pisanju v datoteko in potem brisanje
datoteke, ko sva končala z njo, lahko zapišemo, da posebna
datoteka z imenom / dev / null.
Če je kaj napisal, da dev/null-- /
ali pa samo za kratek devnull -
se samodejno izločeni.
Torej misliš devnull kot črne luknje za svoje podatke.
>> Torej, zdaj smo videli, kako je lahko večja kot znak preusmeriti
stdout, da vidimo, kako je mogoče preusmeriti smo standard -
ali s-t-d-in -
primerljiva na standardni izhod.
Medtem ko deluje kot printf pisati pozval potoku
stdout, GetString in podobne funkcije brati iz potoka
imenovano stdin, ki ga privzeto, je tok
vtipkani na tipkovnici.
Mi lahko preusmeri stdin z manj kot znak, ki mu sledi
z imenom datoteke.
Zdaj, namesto da bi od uporabnika vnos v spodnjem
terminal, bo program odpre datoteko smo opredelili in uporabo
njegove linije, kot vhod.
>> Poglejmo, kaj se zgodi.
Čudovito.
V prvi vrstici datoteka.txt je bilo natisnjeno na terminal
ker smo kliče GetString enkrat.
Če bi imeli še en klic, da GetString v našem programu,
Naslednja vrstica datoteka.txt bi bila uporabljena kot
Vhod na ta poziv.
Spet smo se ni spremenil našo C programa na vse.
Mi smo le spremeniti, kako bi sistem deloval.
In prav spomnim, smo se preusmerili stdout ne tokrat,
tako da je izhod programa je bilo še vedno
prikazano na terminalu.
Lahko, seveda, preusmeriti tako stdin
in stdout, kot je ta.
Zdaj file2.txt vsebuje prvo linijo datoteka.txt.
>> Torej, z uporabo teh subjektov, smo bili sposobni prebrati in
pisati iz besedilnih datotek.
Zdaj pa poglejmo, kako lahko uporabimo izhod enega programa, kot
vhod v drug program.
Torej, tukaj je še en preprost program, ki sem C
so se tu imenuje hello.c.
Kot lahko vidite, to preprosto izpiše "Hi
tam! "uporabniku.
Če želim preusmeriti uporabiti kot vhod izhod zdravo -
drug program -
Jaz bi se lahko prvič preusmerite stdout v pozdrav datoteki z imenom
input.txt, preusmerite stdin za preusmeritev na isti
Datoteka - input.txt.
Tako lahko storim. / Zdravo> input.txt.
Pritisnite Enter za izvedbo tega.
Sledi. / Preusmeriti <
input.txt in izvedbo tega.
Tako bomo lahko skrajšajo to bit s podpičjem, ki omogoča
nam teči dva ali več ukazov na isti liniji.
Torej lahko rečem,. / Zdravo> input.txt, podpičje,
. / Preusmeriti <input.txt.
>> Tako to deluje, vendar je še vedno počuti zelo eleganten.
Mislim, ali res potrebujemo to sliko vmesno besedilo, ki je
ni več potrebno preusmeriti po vožnji?
K sreči, bomo lahko izognili dodatnemu besedilno datoteko s pomočjo katere je
imenovane cevi.
Če rečem, / pozdravi |.. / Preusmeriti, nato v stdout
Program na levi -
V tem primeru je zdravo -
se uporablja kot standardni vhod za
Program na desni strani.
V tem primeru preusmeriti. Torej, kaj je to teči.
>> Takole.
Vidimo lahko, da je bilo uporabljeno izhodno Hello kot vhod
za preusmeritev.
By zavezovanja ukazov skupaj s pomočjo cevi, oblikujemo, kar je
imenovano plinovod, saj je naša proizvodnja je v bistvu premikajo
skozi zaporedje ukazov.
Uporaba cevi, lahko naredimo nekaj kul stvari, ne da bi
napisati kodo na vse.
Na primer, recimo, da želimo vedeti, koliko datoteke
znotraj tega imenika.
Uporaba cevi, lahko združimo ukaza ls z wc -
ali wordcount -
ukaz.
Ali bo oddajala vsako datoteko v imenik na stdout, in
wc nam bo povedal, koliko vrstic smo namenili tudi preko standardnega vhoda.
Torej, če rečemo, ls | wc-l -
oskrbujejo-l zastavo, wc, da mu povedo, da računajo linije -
lahko vidimo, koliko so datoteke
V trenutnem imeniku.
>> Torej si oglejte še en primer.
Tukaj imam datoteko z imenom students.txt,
s seznamom imen.
Vendar pa ta imena niso v poljubnem vrstnem redu je vse, in izgleda
kot se ponavljajo nekaj imen.
Kaj hočemo, je seznam enoličnih imen v abecednem vrstnem redu
Da, shrani v datoteko z imenom final.txt.
Lahko bi, seveda, napisati program C, da to stori za nas.
Ampak to se dogaja, da po nepotrebnem dobili
Kompleksna precej hitro.
Naj raje uporabljajo cevi in ​​nekaj Vgrajena orodja za reševanje
ta problem.
>> Prva stvar, ki jo morate storiti, je, preberite datoteko students.txt.
Ukaz cat se bo prav to.
To bo brati iz datoteke in pisati
njegove vsebine na stdout.
Potem, ko smo brali besedilno datoteko, bomo
želite razvrstiti imena.
Vrstni ukaz, da zmorem to za nas.
Razvrsti bo oddajala linijo, ki jo posreduje stdin stdout
v urejenih vrstnem redu.
Za oskrbo z vsebino students.txt na
sortiranje na stdin smo lahko uporabite cev za združevanje in razvrščanje mačko.
Torej lahko izvaja mačka students.txt | Razvrsti in
pritisnite tipko Enter.
In zdaj smo videli vsebino v students.txt
po abecednem vrstnem redu.
>> Torej, kaj je dodati še ukaz -
uniq, ali edinstvena -
naše plinovoda.
Kot ste lahko uganiti, unikatnega, opravljene na razvrščenih zaporedje
linije preko standardnega vhoda, bo izhod edinstvene linije.
Torej, zdaj imamo mačka students.txt
| Sort | uniq.
Končno bomo lahko shranite izhod cevovoda
Datoteka z mačjo students.txt | vrsta | uniq
> Final.txt.
Torej, če bomo odprli final.txt, imamo točno to, kar smo bili
iskanje:
Seznam posebnih imen, po abecednem vrstnem redu,
shrani v besedilno datoteko.
Mimogrede, bi lahko tudi rekli nekako <
students.txt | uniq> final.txt storiti natanko
ista stvar, pri čemer vsak od subjektov, ki smo jih videli v
ta video.
>> Moje ime je Tommy, in to je CS50.