Tip:
Highlight text to annotate it
X
[Powered by Google Translate] Tommy: V tomto videu, tak sme sa dozvedeli o
presmerovanie a potrubia.
Zatiaľ sme používali funkcie ako printf, aby
výstup dát na termináli a funguje ako GetString
umožniť užívateľovi, aby prispela k našej
programu pomocou klávesnice.
Poďme rýchlo sa pozrieť na program, ktorý dostane rad
Vstup od užívateľa, a potom výstup do.
>> Na riadku 7, my by užívateľovi zobrazil výzvu pre reťazec, a
potom na linke 8, sme vytlačení späť.
Poďme kompilovať a spúšťať náš program.
Great.
Reťazec sme poskytli odozvu späť
nám na termináli.
To sa stalo preto, že printf funkcie napísala
Prúd tzv štandardný výstup, alebo s-t-d-von.
Keď je niečo napísané na stdout, je to v predvolenom nastavení
zobraziť terminálu.
>> Tak to je všetko v poriadku a dobré, ale čo keď namiesto toho, aby jednoducho
zobrazenie reťazec, chceli sme ho uložiť do súboru?
Napríklad, chceme spomenúť, čo presne naše
Program urobil, keď sme to zvláštne vstup neskôr.
Jedným z nich by bolo, aby to v našom programe C, s použitím
niektoré špeciálne funkcie pre zápis do súborov, ktoré budeme
pozri v inom videu.
Ešte jednoduchšie, keď by sa nejako
stdout presmerovať do súboru.
Tak, keď printf píše na stdout, bude obsah
byť zapísané do súboru, skôr ako
zobraziť terminálu.
Môžeme robiť len to pridaním väčší-ako znamenie, nasleduje
podľa názvu súboru, na príkaz používame spustiť náš program.
>> Takže, skôr než jednoducho spustením. / Presmerovanie, môžeme
spustiť. / presmerovanie, nasledovaný väčšou ako znamienko, nasleduje
Názov súboru, ako file.txt.
Poďme sa pozrieť, čo sa stane.
OK.
Všimnite si, že tentoraz, bol nič neobjaví na termináli,
ale my sme upravili obsah našej
C program vôbec.
Poďme teraz preskúmať obsah tohto adresára ls.
>> Dobrá.
Teraz máme nový súbor v našom adresári s názvom file.txt,
čo je názov súboru sme dodali, keď sme bežali OUR
Presmerovanie programu.
Poďme otvoriť file.txt.
A tu môžeme vidieť, že stdout z presmerovania je
zapísaná do súboru s názvom file.txt.
Takže poďme spustiť predchádzajúci príkaz znovu, ale dodáva
iný vstup tentoraz.
Dobre.
Poďme sa pozrieť na file.txt teraz.
>> Môžeme vidieť, že súbor bol prepísaný, tak naše
Originálne vstup už tam nie je.
Ak by sme namiesto toho chcete pridať do tohto súboru, uvedenie nového
Vstup pod existujúce obsah súboru, môžeme
používať dva väčšie-ako príznaky namiesto jednej.
Skúsme to.
Teraz, keď sme sa otvoriť file.txt znova, môžeme vidieť i nášho
vstupné riadky.
V niektorých prípadoch môže byť chceme vyradiť všetky
výstup nášho programu.
Skôr než písanie výstup do súboru a potom mazanie
súbor, keď sme sa s tým, my môžeme písať osobitného
súbor s názvom / dev / null.
Keď je niečo napísané na / dev/null--
alebo len devnull skrátene -
je automaticky vyradené.
Takže myslíte, že z devnull ako čierne diery pre vaše dáta.
>> Takže teraz sme videli, ako väčšia ako znak môže presmerovať
stdout, pozrime sa, ako môžeme presmerovať štandard -
alebo s-t-d-v -
obdoba stdout.
Kým funkcie ako printf zapisovať do tzv streamu
stdout, GetString a podobné funkcie čítania z prúdu
názvom stdin, ktorý v predvolenom nastavení, je prúd
znaky zadané na klávesnici.
Môžeme presmerovať stdin pomocou menej ako znamienko, nasleduje
podľa názvu súboru.
Teraz, skôr než by užívateľovi zobrazil výzvu pre vstup na
terminál, bude program otvorí súbor sme špecifikovali a používať
jeho linky ako vstup.
>> Poďme sa pozrieť, čo sa stane.
Great.
Prvý riadok súboru file.txt bol vytlačený na terminál
preto, že sme volaní GetString raz.
Ak sme mali ďalšie volanie GetString v našom programe,
ďalší riadok súboru file.txt by boli použité ako
Vstup na túto výzvu.
Opäť sme nemení náš C program vôbec.
Sme len zmenou, ako sme ho spustiť.
A tiež nezabudnite, sme sa presmerovanie stdout tentoraz,
takže výstup programu bol ešte
zobrazí na termináli.
Môžeme, samozrejme, presmerovanie obaja stdin
a stdout takhle.
Teraz, file2.txt obsahuje prvý riadok súboru file.txt.
>> Takže pomocou týchto operátorov, sme boli schopní čítať a
zápisnica z textových súborov.
Teraz sa pozrime, ako môžeme využiť výstup z jedného programu
vstup do iného programu.
Tak tu je ďalší jednoduchý C program, ktorý som
sa tu nazýva hello.c.
Ako môžete vidieť, to jednoducho výstupy "Hi
tam! "pre užívateľa.
Ak chcem presmerovať použiť ako vstup výstup ahoj -
iný program -
Mohol by som prvý presmerovanie stdout z hello to s názvom súboru
input.txt, potom presmerujte stdin o presmerovanie na ten rovnaký
Súbor - input.txt.
Tak som si to. / Hello> input.txt.
Stlačte Enter pre vykonanie tohto.
Nasledoval. / Redirect <
input.txt, a spustiť to.
Takže môžeme skrátiť tento bit bodkočiarkou, ktorý umožňuje
nás prevádzkovať dva alebo viacero príkazov na rovnakom riadku.
Takže môžem povedať,. / Hello> input.txt, bodkočiarku,
. / Redirect > Tak to funguje, ale stále cíti celkom nevkusný.
Myslím, že my naozaj potrebujeme tento sprostredkovateľský textový súbor, ktorý je
už nie je nutné po presmerovanie behy?
Našťastie, môžeme sa vyhnúť tejto osobitnej textový súbor pomocou toho, čo je
volal potrubia.
Keď poviem, / hello | .. / Presmerovať, potom stdout z
Program vľavo -
v tomto prípade, ahoj -
budú použité ako štandardný vstup pre
Program na pravej strane.
V tomto prípade, presmerovanie. Tak poďme spustiť tento.
>> Tam ideme.
Môžeme vidieť, že výstup ahoj bol použitý ako vstup
pre presmerovanie.
Návlekom príkazy spoločne s použitím potrubia, tvoríme to, čo je
volal potrubia, pretože naša produkcia je v podstate pohybuje
cez sled príkazov.
Pomocou rúrky, môžeme urobiť nejaké cool veci, bez toho aby ste museli
písať akýkoľvek kód vôbec.
Napríklad, povedzme, že chceme vedieť, koľko súborov je
Vnútri tohto adresára.
Pomocou rúrky, môžeme kombinovať príkazu ls s WC -
alebo WordCount -
príkaz.
Ls vypíše každý súbor v adresári na stdout, a
wc nám povie, koľko riadkov bolo rovnako k nemu cez stdin.
Takže, keď povieme ls | wc-l -
dodáva-l vlajkou wc povedať to počítať riadky -
môžeme presne vidieť, ako veľa súborov
v aktuálnom adresári.
>> Takže poďme sa pozrieť na jeden príklad.
Mám tu súbor s názvom students.txt,
so zoznamom mien.
Avšak, tieto mená nie sú v ľubovoľnom poradí, že všetky, a vyzerá to
ako pár mien sa opakujú.
To, čo chceme, je zoznam unikátnych mien v abecednom poradí
aby, uložiť do súboru s názvom final.txt.
Mohli by sme, samozrejme, napísať program v jazyku C, aby to pre nás.
Ale to dostane zbytočne
Komplex celkom rýchlo.
Poďme namiesto toho použiť potrubia a niektoré Vstavaná nástroje na riešenie
tento problém.
>> Prvá vec, ktorú musíme urobiť, je prečítať súbor students.txt.
Mačka Príkaz bude robiť len to.
To bude čítať v uvedenom súbore a písať
jeho obsah na štandardný výstup.
Potom, čo sme si prečítali textový súbor, zídeme sa
chcete triediť mená.
Príkaz sort zvládne to pre nás.
Zoradiť vypíše riadok dodaný cez stdin na stdout
v zoradenie poradí.
Aby bolo možné dodať obsah students.txt na
SORT je stdin, mohli by sme použiť rúrku kombinovať mačku a radenie.
Tak som si spustite cat students.txt | triedenia a
stlačte klávesu Enter.
A teraz, vidíme obsah students.txt v
v abecednom poradí.
>> Takže poďme pridať ďalší príkaz -
UNIQA, alebo jedinečné -
našej potrubia.
Ako asi tušíte, UNIQA, keď dodala zoradená postupnosť
spoje cez stdin, vypíše jedinečné riadky.
Takže teraz máme mačku students.txt
| Sort | Uniqa.
A konečne, môžeme uložiť výstup potrubia, aby
súboru cez mačacie students.txt | sort | Uniqa
> Final.txt.
Takže, ak by sme otvoriť final.txt, máme presne to, čo sme boli
Hľadám:
zoznam jedinečných mien v abecednom poradí,
uložiť do textového súboru.
Mimochodom, sme tiež mohol povedať, sort <
students.txt | Uniqa> final.txt robiť presne to,
to isté, použitie každej z operátorov sme videli v
toto video.
>> Moje meno je Tommy, a to je CS50.