[Powered by Google Translate] TOMMY: Tässä videossa me oppia
suuntaamaan ja putket.
Toistaiseksi olemme käyttäneet toiminnot kuten printf ja
lähtödata päätelaitteelle ja toimintoja, kuten GetString
jotta käyttäjä voi antaa panoksensa meidän
Ohjelma näppäimistöllä.
Katsotaanpa nopeasti katsomaan ohjelmaa, joka saa linja
sisäänsyöte käyttäjältä ja syöttää sitten sen.
>> Rivillä 7, olemme kehotukset käyttäjältä merkkijonon, ja
Sitten rivillä 8, me tulostaa sen takaisin ulos.
Katsotaanpa kääntää ja ajaa meidän ohjelmaa.
Suuri.
Merkkijono annoimme yhtyivät takaisin
meille terminaaliin.
Tämä tapahtui siksi printf funktion kirjoitti
stream kutsutaan standardi ulos, tai s-t-d-out.
Kun jotain on kirjoitettu stdout, se on oletusarvoisesti
näytetään päätelaitteen.
>> Niin, että ihan hyvä, mutta mitä jos sen sijaan, että yksinkertaisesti
näyttää merkkijonon, halusimme tallentaa sen tiedoston?
Esimerkiksi meidän kannattaa muistaa, mitä meidän
Ohjelma teki, kun annoimme sen tietty tulo myöhemmin.
Yksi tapa olisi tehdä tätä meidän C-ohjelma, käyttäen
joitakin erityisiä toimintoja kirjallisesti tiedostoja että me
nähdä toinen video.
Vieläkin helpompaa, vaikka olisi jotenkin
redirect stdout tiedostoon.
Tällä tavoin, kun printf kirjoittaa stdout, sisältö
voidaan kirjoittaa tiedostoon sijaan
näytetään päätelaitteen.
Voimme tehdä juuri niin lisäämällä suurempi kuin-merkki, jonka jälkeen
jonka tiedostonimen, jotta komento käytämme toteuttaa ohjelmaamme.
>> Niin, eikä vain täytäntöönpanovaltiossa. / Redirect, voimme
suorittaa. / uudelleenohjaus, jonka jälkeen on suurempi kuin merkki, jota seuraa
tiedostonimi, kuten tiedosto.txt.
Katsotaan mitä tapahtuu.
OK.
Huomaa, että tällä kertaa, mitään ei näy päätteellä,
mutta emme ole muuttaneet sisältöä meidän
C ohjelmaa lainkaan.
Katsotaanpa nyt tutkia tämän hakemiston sisällöstä ls.
>> Selvä.
Meillä on nyt uusi tiedosto meidän hakemistoon nimeltä tiedosto.txt,
joka on tiedoston nimi toimitimme kun juoksi meidän
Redirect ohjelma.
Katsotaanpa avata tiedosto.txt.
Ja täällä, voimme nähdä, että stdout pois redirect oli
kirjoitetaan tiedostoon nimeltä tiedosto.txt.
Joten suorita edellisen komennon uudestaan, mutta toimittaa
Eri tulo tällä kertaa.
Okei.
Katsotaanpa katsomaan tiedosto.txt nyt.
>> Voimme nähdä tässä, että tiedosto on korvattu, joten meidän
alkuperäinen panos ei ole enää.
Jos sen sijaan haluat liittää tähän tiedostoon, asettaa uusi
tulo alapuolella olevia tiedoston sisältö, voimme
käyttää kahta suurempi kuin-merkkejä yhden sijasta.
Kokeillaan sitä.
Nyt, jos avaamme tiedosto.txt uudelleen, voimme nähdä meidän kummankin
syöterivit.
Joissakin tapauksissa saatamme haluta hylätä mitään
lähtö ohjelmamme.
Kirjoittamisen sijasta tuloste tiedostoon ja poistamalla
tiedoston, kun olemme tehneet sen, voimme kirjoittaa erityiseen
tiedosto nimeltä / dev / null.
Kun jotain on kirjoitettu / dev/null--
tai vain devnull lyhyitä -
se hylätään automaattisesti.
Joten ajattele devnull kuin musta aukko tietosi.
>> Joten nyt olemme nähneet, kuinka suurempi kuin-merkki voidaan ohjata
stdout, katsotaanpa miten voimme ohjata standardi -
tai s-t-d-in -
analogi stdout.
Vaikka toimintoja, kuten printf kirjoittaa stream kutsutaan
stdout, GetString ja vastaavat toiminnot luetaan virrasta
nimeltään stdin, joka oletusarvoisesti on virta
merkkiä näppäimistöllä kirjoitettu.
Voimme suunnata stdin käyttämällä vähemmän kuin merkki, jota seuraa
jonka tiedostonimi.
Nyt sen sijaan kehotetaan käyttäjää tuloon
terminaali, ohjelma avaa tiedoston me määritetty ja käyttää
sen linjat syötteenä.
>> Katsotaan mitä tapahtuu.
Suuri.
Ensimmäinen rivi tiedosto.txt on tulostettu päätelaitteelle
koska olemme soittamalla GetString kerran.
Jos meillä oli toinen puhelu GetString meidän ohjelmaan,
seuraavalle riville tiedosto.txt olisi käytetty
tulo että puhelun.
Jälleen, emme ole muutettu meidän C-ohjelmaan lainkaan.
Olemme vain muuttamalla miten käyttää sitä.
Ja myös muistaa, ettemme ole ohjata stdout tällä kertaa,
niin lähtö ohjelma oli yhä
näytetään pääte.
Voimme tietenkin ohjata sekä stdin
ja stdout näin.
Nyt, file2.txt sisältää ensimmäisen rivin tiedosto.txt.
>> Joten, käyttää näitä operaattoreita, olemme voineet lukea ja
kirjoittaa tekstitiedostoja.
Nyt, katsotaanpa miten voimme käyttää tuotos yhden ohjelman
tulo toiseen ohjelmaan.
Joten tässä on toinen yksinkertainen C-ohjelma I
ovat tässä kutsutaan hello.c.
Kuten näette, tämä yksinkertaisesti lähdöt "Hi
siellä! "käyttäjälle.
Jos haluan ohjata käyttää syötteenä lähtö Hello -
toinen ohjelma -
En voisi ensin suunnata stdout Hello tiedostoon nimeltä
input.txt, ohjaa sitten stdin on uudelleenohjaus saman
tiedosto - input.txt.
Joten en voi tehdä. / Hello> input.txt.
Paina Enter suorittamaan tätä.
Seuraaja. / Redirect <
input.txt ja suorittamiseen.
Joten voimme lyhentää tätä hieman toisistaan ​​puolipisteellä, joka mahdollistaa
meitä kahta tai useampaa komentoja samalla linjalla.
Voin siis sanoa,. / Hei> input.txt, puolipiste,
. / Redirect <input.txt.
>> Joten tämä toimii, mutta se silti tuntuu melko kömpelö.
Tarkoitan, me todella tarvitsemme tätä välittäjä tekstitiedosto, joka on
enää tarvita sen jälkeen uudelleenohjaus toimii?
Onneksi voimme välttää tämän ylimääräisen tekstitiedosto käyttäen mitä
kutsutaan putki.
Jos sanon,. / Hei |. / Redirect sitten stdout ja
Ohjelma vasemmalla -
tässä tapauksessa, hei -
käytetään standardina tulo
Ohjelman oikealla.
Tällöin uudelleenohjaus. Joten suorita tätä.
>> Siellä mennään.
Voimme nähdä, että tuotos Hello käytettiin panos
ja uudelleenohjaus.
Nauhassa komentoja toisiinsa putket, muodostamme mitä
kutsutaan putki, koska meidän tuotanto on pääosin liikkuu
järjestyksessä läpi komentoja.
Käyttämällä putket, voimme tehdä hienoja juttuja tarvitsematta
kirjoittaa koodia lainkaan.
Esimerkiksi sanokaamme haluamme tietää, kuinka monta tiedostoa
sisällä tähän hakemistoon.
Käyttämällä putki, voimme yhdistää ls komento WC -
tai Wordcount -
komento.
Ls tulee tulostaa jokaisen tiedoston hakemistoon stdout, ja
WC kertoo meille kuinka monta riviä saivat sitä kautta stdin.
Joten, jos sanomme LS | wc-l -
toimittaa-l lipun wc kertoa se laskea riviä -
Voimme nähdä kuinka monta tiedostoa
nykyiseen hakemistoon.
>> Joten katsomaan yksi esimerkki.
Minulla on täällä tiedosto nimeltä students.txt,
joiden nimiluettelo.
Kuitenkin nämä nimet eivät ole missään järjestyksessä kaiken, ja se näyttää
kuin muutamia nimiä toistetaan.
Haluamme lista yksilölliset nimet aakkosjärjestyksessä
järjestyksessä tallennetaan tiedostoon nimeltä final.txt.
Voisimme tietysti kirjoittaa C-ohjelma tehdä tätä meille.
Mutta se tulee saada tarpeettoman
monimutkainen melko nopeasti.
Katsotaanpa sen sijaan käyttää putkia ja joitakin sisäänrakennettu-työkaluja ratkaista
tämä ongelma.
>> Ensimmäinen asia, joka meidän täytyy tehdä, on lukea tiedosto students.txt.
Kissa komento tekevät juuri niin.
Se luetaan määritetyn tiedoston ja kirjoittaa
sisällön stdout.
Kun olemme lukeneet tekstitiedosto, hyvitämme
haluat lajitella nimiä.
Sort-komennolla voi käsitellä tätä meille.
Järjestä syöttävät linjan kautta syötetyn stdin stdout
vuonna lajiteltu järjestyksessä.
Voidakseen toimittaa sisällön students.txt ja
sort n stdin, voisimme käyttää putkea yhdistää kissan ja lajitella.
Joten en voi suorittaa kissan students.txt | sort ja
paina Enter.
Ja nyt näemme sisällön students.txt vuonna
aakkosjärjestyksessä.
>> Joten lisää toinen käsky -
Uniq, tai ainutlaatuinen -
meidän putki.
Kuten arvata saattaa, uniq, kun mukana lajitellaan järjestyksessä
linjat kautta stdin, joka tulostaa ainutlaatuinen linjat.
Joten nyt meillä on kissa students.txt
| Sort | uniq.
Lopuksi, voimme säästää lähdön putkilinja
tiedoston kautta kissa students.txt | sort | uniq
> Final.txt.
Joten, jos me avata final.txt, meillä on mitä me olimme
etsivät:
luettelon ainutlaatuisia aakkosjärjestyksessä,
tallennetaan tekstitiedostoon.
Muuten olemme myös voineet sanoa sort <
students.txt | Uniq> final.txt tehdä täsmälleen
sama asia, käyttäen kunkin toimijoiden olemme nähneet
tämän videon.
>> Nimeni on Tommy, ja tämä on CS50.