Tip:
Highlight text to annotate it
X
[Powered by Google Translate] Tommy: V tomto videu, tak jsme se dozvěděli o
přesměrování a potrubí.
Zatím jsme používali funkce jako printf to
výstup dat na terminálu a funguje jako GetString
umožnit uživateli, aby přispěla k naší
programu pomocí klávesnice.
Pojďme rychle se podívat na program, který dostane řadu
Vstup od uživatele, a pak výstup do.
>> Na řádku 7, my by uživateli zobrazil výzvu pro řetězec, a
pak na lince 8, jsme vytištění zpět.
Pojďme kompilovat a spouštět náš program.
Great.
Řetězec jsme poskytli odezvu zpět
nám na terminálu.
To se stalo proto, že printf funkce napsala
Proud tzv. standardní výstup, nebo s-t-d-ven.
Když je něco napsáno na stdout, je to ve výchozím nastavení
zobrazit terminálu.
>> Tak to je všechno v pořádku a dobré, ale co když místo toho, aby prostě
zobrazení řetězec, chtěli jsme jej uložit do souboru?
Například, chceme vzpomenout, co přesně naše
Program udělal, když jsme to zvláštní vstup později.
Jedním z nich by bylo, aby to v našem programu C, za použití
některé speciální funkce pro zápis do souborů, které budeme
viz v jiném videu.
Ještě jednodušší, když by se nějak
stdout přesměrovat do souboru.
Tak, když printf píše na stdout, bude obsah
být zapsány do souboru, spíše než
zobrazit terminálu.
Můžeme dělat jen to přidáním větší-než znamení, následuje
podle názvu souboru, na příkaz používáme spustit náš program.
>> Takže, spíše než jednoduše spuštěním. / Přesměrování, můžeme
spustit. / přesměrování, následovaný větší než znaménko, následuje
Název souboru, jako soubor.txt.
Pojďme se podívat, co se stane.
OK.
Všimněte si, že tentokrát, byl nic neobjeví na terminálu,
ale my jsme upravili obsah naší
C program vůbec.
Pojďme nyní prozkoumat obsah tohoto adresáře ls.
>> Dobrá.
Nyní máme nový soubor v našem adresáři s názvem soubor.txt,
což je název souboru jsme dodali, když jsme běželi OUR
Přesměrování programu.
Pojďme otevřít soubor.txt.
A tady můžeme vidět, že stdout z přesměrování je
zapsána do souboru s názvem soubor.txt.
Takže pojďme spustit předchozí příkaz znovu, ale dodává
jiný vstup tentokrát.
Dobře.
Pojďme se podívat na soubor.txt teď.
>> Můžeme vidět, že soubor byl přepsán, tak naše
Originální vstup už tam není.
Pokud bychom místo toho chcete přidat do tohoto souboru, uvedení nového
Vstup pod stávající obsah souboru, můžeme
používat dva větší-než příznaky namísto jedné.
Zkusme to.
Teď, když jsme se otevřít file.txt znovu, můžeme vidět i našeho
vstupní řádky.
V některých případech může být chceme vyřadit všechny
výstup našeho programu.
Spíše než psaní výstup do souboru a pak mazání
soubor, když jsme s ním udělal, můžeme napsat na zvláštní
soubor s názvem / dev / null.
Když je něco napsáno na / dev/null--
nebo jen devnull zkráceně -
je automaticky vyřazeny.
Takže myslíte, že z devnull jako černé díry pro vaše data.
>> Takže teď jsme viděli, jak větší než znak může přesměrovat
stdout, podívejme se, jak můžeme přesměrovat standard -
nebo s-t-d-v -
analog stdout.
Zatímco funkce jako printf zapisovat do tzv. streamu
stdout, GetString a podobné funkce čtení z proudu
názvem stdin, který ve výchozím nastavení, je proud
znaky zadané na klávesnici.
Můžeme přesměrovat stdin pomocí méně než znaménko, následuje
podle názvu souboru.
Nyní, spíše než by uživateli zobrazil výzvu pro vstup se na
terminál, bude program otevře soubor jsme specifikovali a používat
jeho linky jako vstup.
>> Pojďme se podívat, co se stane.
Great.
První řádek souboru soubor.txt byl vytištěn na svorce
proto, že jsme volání GetString jednou.
Pokud jsme měli další volání GetString v našem programu,
další řádek souboru soubor.txt by byly použity jako
Vstup na tuto výzvu.
Opět jsme nemění náš C program vůbec.
Jsme jen změnou, jak jsme jej spustit.
A také nezapomeňte, jsme se přesměrování stdout tentokrát,
takže výstup programu byl ještě
zobrazí na terminálu.
Můžeme, samozřejmě, přesměrování oba stdin
a stdout takhle.
Nyní, file2.txt obsahuje první řádek souboru soubor.txt.
>> Takže pomocí těchto operátorů, jsme byli schopni číst a
zápis z textových souborů.
Nyní se podívejme, jak můžeme využít výstup z jednoho programu
vstup do jiného programu.
Tak tady je další jednoduchý C program, který jsem
se zde nazývá hello.c.
Jak můžete vidět, to prostě výstupy "Hi
tam! "pro uživatele.
Pokud chci přesměrovat použít jako vstup výstup ahoj -
jiný program -
Mohl bych první přesměrování stdout z hello to s názvem souboru
input.txt, pak přesměrujte stdin o přesměrování na ten stejný
Soubor - input.txt.
Tak jsem si to. / Hello> input.txt.
Stiskněte Enter pro provedení tohoto.
Následoval. / Redirect <
input.txt, a spustit to.
Takže můžeme zkrá*** tento bit středníkem, který umožňuje
nás provozovat dva či více příkazy na stejném řádku.
Takže můžu říct,. / Hello> input.txt, středník,
. / Redirect > Tak to funguje, ale stále cítí docela nevkusný.
Myslím, že my opravdu potřebujeme tento zprostředkovatelský textový soubor, který je
již není nutné po přesměrování běhy?
Naštěstí, můžeme se vyhnout této zvláštní textový soubor pomocí toho, co je
volal potrubí.
Když řeknu, / hello |.. / Přesměrovat, pak stdout z
Program vlevo -
v tomto případě, ahoj -
budou použity jako standardní vstup pro
Program na pravé straně.
V tomto případě, přesměrování. Tak pojďme spustit tento.
>> Tam jdeme.
Můžeme vidět, že výstup ahoj byl použit jako vstup
pro přesměrování.
Návlekem příkazy společně s použitím potrubí, tvoříme to, co je
volal potrubí, protože naše produkce je v podstatě pohybuje
přes sled příkazů.
Pomocí trubky, můžeme udělat nějaké cool věci, aniž byste museli
psát jakýkoli kód vůbec.
Například, řekněme, že chceme vědět, kolik souborů je
Uvnitř tohoto adresáře.
Pomocí trubky, můžeme kombinovat příkazu ls s WC -
nebo WordCount -
příkaz.
Ls vypíše každý soubor v adresáři na stdout, a
wc nám řekne, kolik řádků bylo stejně k němu přes stdin.
Takže, když řekneme ls | wc-l -
dodává-l vlajkou wc říct to počítat řádky -
můžeme přesně vidět, jak mnoho souborů
v aktuálním adresáři.
>> Takže pojďme se podívat na jeden příklad.
Mám zde soubor s názvem students.txt,
se seznamem jmen.
Nicméně, tato jména nejsou v libovolném pořadí, že všechny, a vypadá to
jako pár jmen se opakují.
To, co chceme, je seznam unikátních jmen v abecedním pořadí
aby, uložit do souboru s názvem final.txt.
Mohli bychom, samozřejmě, napsat program v jazyce C, aby to pro nás.
Ale to dostane zbytečně
Komplex docela rychle.
Pojďme místo toho použít potrubí a některé Vestavěná nástroje k řešení
tento problém.
>> První věc, kterou musíme udělat, je přečíst soubor students.txt.
Kočka Příkaz bude dělat jen to.
To bude číst v uvedeném souboru a psát
jeho obsah na standardní výstup.
Poté, co jsme si přečetli textový soubor, sejdeme se
chcete seřadit jména.
Příkaz sort zvládne to pro nás.
Seřadit vypíše řádek dodaný přes stdin na stdout
v seřazeném pořadí.
Aby bylo možné dodat obsah students.txt na
SORT je stdin, mohli bychom použít trubku kombinovat kočku a řazení.
Tak jsem si spusťte cat students.txt | třídění a
stiskněte klávesu Enter.
A teď, vidíme obsah students.txt v
v abecedním pořadí.
>> Takže pojďme přidat další příkaz -
uniq, nebo jedinečné -
naší potrubí.
Jak asi tušíte, uniq, když dodala seřazena posloupnost
spoje přes stdin, vypíše jedinečné řádky.
Takže teď máme kočku students.txt
| Sort | uniq.
A konečně, můžeme uložit výstup potrubí, aby
souboru přes kočičí students.txt | sort | uniq
> Final.txt.
Takže, pokud bychom otevřít final.txt, máme přesně to, co jsme byli
Hledám:
seznam jedinečných jmen v abecedním pořadí,
uložit do textového souboru.
Mimochodem, jsme také mohl říci, sort <
students.txt | uniq> final.txt dělat přesně to,
totéž, použití každé z operátorů jsme viděli v
toto video.
>> Mé jméno je Tommy, a to je CS50.