[Powered by Google Translate] TOMMY: Selles videos me õppida
suunata ja torud.
Siiani oleme kasutanud funktsioone nagu printf kuni
andmete väljastamine terminali ja toimib nagu getString
mis võimaldab kasutajal anda oma panus meie
programmi kasutades klaviatuuri.
Lähme kiiresti heita pilk programm, mis saab rida
panus kasutaja ja siis näitab seda.
>> Real 7, me ajendades kasutajal stringi, ning
siis real 8, me trüki see tagasi viia.
Olgem kompileerida ja käivitada oma programmi.
Suur.
String me ette kordas tagasi
meile terminalis.
See juhtus, sest printf funktsiooni kirjutas
oja nimetatakse standard välja, või s-t-d välja.
Kui midagi on kirjutatud standardväljundisse, see on vaikimisi
kuvatakse terminali.
>> Nii et kõik on hästi ja hea, aga mis siis, kui selle asemel, et lihtsalt
väljapanek string, tahtsime salvestage see fail?
Näiteks tahetakse mäleta täpselt, mida meie
programmi tegi, kui me andsime ta eriti sisend hiljem.
Üks lahendus oleks teha seda meie C programm, kasutades
Mõnede funktsioonide jaoks kirjalikult failid, et me
vaata teise video.
Veelgi lihtsam, aga oleks kuidagi
suunata stdout faili.
Nii, kui printf kirjutab standardväljundisse, sisu läheb
kirjutatakse faili asemel
kuvatakse terminali.
Me võime teha just seda, lisades suurem-kui märk, millele järgneb
poolt failinime, et käsk me kasutame täita meie programm.
>> Niisiis, selle asemel et lihtsalt täidesaatva. / Suunata, saame
joosta. / suunata, millele järgneb suurem kui märk, millele järgneb
failinimi, nagu fail.txt.
Vaatame, mis juhtub.
OK.
Pange tähele, et sel ajal, midagi kuvati terminalis,
kuid me ei ole muutnud sisu meie
C programm üldse.
Olgem nüüd uurida sisu sellesse kataloogi koos ls.
>> Hea küll.
Meil on nüüd uus fail meie kataloogi nimega fail.txt,
mis on faili nimi muretsesime, kui me jooksime meie
Suuna programmi.
Avame kuni fail.txt.
Ja siin me näeme, et stdout välja suunata oli
kirjutatakse faili nimega fail.txt.
Nii et olgem joosta eelmise käsu uuesti, kuid varustamise
teistlaadi seekord.
Okei.
Võtame pilk fail.txt nüüd.
>> Me näeme siin, et fail on üle kirjutatud, nii et meie
originaal sisend ei ole seal enam.
Kui me selle asemel soovite lisada selle faili, pannes uus
nimisoojusvõimsusega olemasoleva faili sisu, saame
kasutada kaks suuremat-kui märke ühe asemel.
Proovime seda.
Nüüd, kui me avame fail.txt jälle näeme nii meie
sisendi ridade.
Mõnel juhul tahetakse ära visata
toodang meie programm.
Selle asemel, et kirjalikult väljund faili ja siis kustutada
fail, kui me sellega lõpetanud, saame kirjutada, et erilist
faili / dev / null.
Kui midagi on kirjutatud / dev/null--
või lihtsalt devnull lühikeseks -
see automaatselt ära visata.
Nii et mõtle devnull nagu must auk oma andmeid.
>> Nüüd oleme näinud, kuidas märk Suurem kui saab suunata
stdout, vaatame, kuidas saame suunata standard -
või s-t-D-IN -
analoog standardväljundisse.
Kuigi funktsioone nagu printf kirjutada oja nimetatakse
stdout getString ja samalaadsed toimingud lugeda oja
nimetatakse stdin, mis vaikimisi on oja
Lõbu trükitud klaviatuuri.
Me saame suunata stdin kasutades vähem kui märk, millele järgneb
poolt failinimi.
Nüüd, selle asemel, ajendades kasutaja sisend
terminali programm avab faili me täpsustada ja kasutada
oma read sisendiks.
>> Vaatame, mis juhtub.
Suur.
Esimene rida fail.txt on trükitud terminali
sest me nõuame getString kord.
Kui meil oleks teine ​​kõne getString meie programmis,
Järgmine rida fail.txt oleks kasutatud nii
panuse, et kõne.
Jällegi, me ei ole muudetud meie C programm üldse.
Me ainult ei muutu, kui me käivitada.
Ja ka meeles pidama, et me ei ole ümber stdout seekord
nii väljund programmi oli veel
kuvatakse terminalis.
Me võime muidugi suunata nii stdin
ja stdout niimoodi.
Nüüd file2.txt sisaldab esimese rea fail.txt.
>> Niisiis, kasutades neid ettevõtjaid, oleme olnud võimelised lugema ja
kirjuta tekstifailidest.
Nüüd vaatame, kuidas saame kasutada toodangut ühe programmi
sisend teise programmi.
Nii et siin on veel üks lihtne C programmi I
on siin nimetatakse hello.c.
Nagu näete, see lihtsalt väljastab "Tere
seal! "kasutaja.
Kui ma tahan suunata kasutama sisendina väljund tere -
teine ​​programm -
Võiksin 1. suunata stdout on tere fail nimega
INPUT.TXT, siis suunata stdin on suunata sellele samale
fail - INPUT.TXT.
Nii et ma suudan. / Hello> INPUT.TXT.
Vajuta Enter täita seda.
Järgneb. / Suunata <
INPUT.TXT, ja täidab seda.
Nii saame lühendada seda natuke semikooloniga, mis võimaldab
meil käivitada kahte või enamat käsud samal joonel.
Nii et võin öelda,. / Hello> INPUT.TXT, semikoolon,
. / Suunata <INPUT.TXT.
>> Nii et see töötab, kuid siiski tundub päris maitsetu.
Ma mõtlen, kas me tõesti vajame seda vahendaja teksti faili, mis on
ei ole enam vaja pärast ümber jookseb?
Õnneks saame vältida seda pildi teksti faili kasutades mis on
nimega toru.
Kui ma ütlen,. / Hello |. / Suunata, siis stdout kohta
Programm vasakul -
sel juhul tere -
hakatakse kasutama standard input for
programmi õige.
Sellisel juhul suunab. Nii et olgem selle käivitada.
>> Nii juba läheb.
Me näeme, et toodangu tere kasutati sisend
jaoks ümber.
Nöörile käskude abil kokku torud, me moodustada mis on
nimetatakse torujuhe, sest meie toodang on põhiliselt liikuv
läbi käskude jada.
Kasutades torud, me saame teha mõned lahedad asjad, ilma et
kirjuta ühtegi koodi üldse.
Näiteks oletame, et me tahame teada, kui palju faile on
sees selles kataloogis.
Kasutades toru, saame kombineerida ls käsk wc -
või wordcount -
käsk.
Kas tulemus on iga faili kataloogis standardväljundisse, ja
WC ütleb meile, kuidas paljud liinid anti selle kaudu stdin.
Niisiis, kui me ütleme, LS | wc-l -
varustavad-l lipu wc öelda seda lugema ridade -
näeme täpselt, kui palju faile on
aktiivses kataloogis.
>> Võtame pilk üks näide.
Mul on siin fail nimega students.txt,
koos nimistuga.
Kuid need nimed ei ole üheski et see kõik, ja see näeb välja
nagu mõned nimed korduvad.
Tahame nimekirja unikaalsed nimed tähestikulises
Selleks, salvestatakse faili nimega final.txt.
Võiksime muidugi Kirjutage C programm seda teha meie jaoks.
Aga see läheb aina asjatult
keeruline päris kiiresti.
Olgem selle asemel kasutada torude ja mõned sisseehitatud-vahendid, et lahendada
see probleem.
>> Esimene asi, mida peame tegema, on lugeda faili students.txt.
Kass käsk teha just seda.
See lugeda määratud faili ja kirjutada
selle sisu standardväljundisse.
Kui me oleme lugenud tekstifail, paneme
soovite sortida nimed.
Omamoodi käsk saavad hakkama seda meie jaoks.
Sorteeri tulemus on kooskõlas kaudu tarnitud stdin standardväljundisse
aastal sorteeritud järjekorras.
Selleks et pakkuda sisu students.txt kuni
Sorteeri stdin, saaksime kasutada toru ühendada kass ja omamoodi.
Ma võin täita kass students.txt | sorteerida ning
vajutage Enter.
Ja nüüd me näeme sisu students.txt sisse
tähestikulises järjekorras.
>> Nii et lisame teise käsu -
VÕTI või unikaalne -
meie torujuhe.
Nagu te võite arvata, UNIQ, kui tarnitud sorteeritud jada
read kaudu stdin, tulemus on ainulaadne read.
Nii et nüüd on meil kass students.txt
| Sorteeri | UNIQ.
Lõpuks saame säästa väljund gaasijuhe
faili saatmiseks kass students.txt | omamoodi | VÕTI
> Final.txt.
Niisiis, kui me avada final.txt, meil on täpselt see, mida olime
otsin:
nimekirja unikaalsed nimed tähestikulises järjekorras,
salvestatakse tekstifailina.
Muide, me ka võinud öelda omamoodi <
students.txt | UNIQ> final.txt teha täpselt
sama asi, kasutades igale ettevõtjale, me oleme näinud
seda videot.
>> Minu nimi on Tommy, ja see on CS50.