[Powered by Google Translate] TOMMY: Šajā video, mēs uzzinātu par
novirzot un caurules.
Līdz šim mēs esam izmantojot funkcijas, piemēram, printf
izejas dati uz terminālu un funkcijas, piemēram, GetString
ļaut lietotājam sniegt ieguldījumu mūsu
programmu, izmantojot tastatūru.
Pieņemsim ātri to apskatīt programmas, kas izpaužas līnija
no lietotāja ievadi un pēc tam izvada to.
>> Gada 7 līnijā, mēs esam pamudinot lietotājam par stīgu, un
tad par 8 līnijā, mēs esam drukāšanas atpakaļ out.
Pieņemsim apkopot un palaist mūsu programmu.
Lieliski.
Stīgu mēs ja atbalsojās atpakaļ
mums uz terminālu.
Tas notika tāpēc, ka printf funkciju rakstīja
plūsma sauc standarta ārā, vai s-t-d-out.
Kad kaut kas ir rakstīts uz stdout, tas ir pēc noklusējuma
parādīti ar terminālā.
>> Tā ka viss ir labi un labs, bet kas notiks, ja tā vietā, lai vienkārši
parādot virkni, mēs vēlējāmies, lai saglabātu to failu?
Piemēram, mēs varētu vēlēties, lai atcerēties, ko tieši mūsu
Programma bija, kad mēs deva tam īpašu ieguldījumu vēlāk.
Viena pieeja būtu izdarīt mūsu C programmas, izmantojot
dažas īpašas funkcijas rakstot uz failiem ka mēs
sk citā video.
Pat vieglāk, lai gan, būtu kaut
novirzīt stdout uz failu.
Tādā veidā, kad printf raksta stdout, saturs tiks
būt rakstīts uz failu, nevis
parādīti ar terminālā.
Mēs varam darīt tikai, ka, pievienojot lielāks nekā zīmi, sekoja
ar faila nosaukumu, ar komandu, mēs izmantojam, lai izpildīt mūsu programmu.
>> Tātad, nevis vienkārši izpildes / pārorientēt. Mēs varam
palaist / pārorientēt., kam seko vairāk nekā zīme, kam seko
filename, piemēram file.txt.
Paskatīsimies, kas notiek.
Labi.
Ievērojiet, ka šoreiz nekas netika parādīts pie termināla,
bet mēs esam ne pārveidotas saturu mūsu
C programma vispār.
Pieņemsim tagad izskata saturu šajā direktorijā ar ls.
>> Labi.
Mums tagad ir jauns mūsu direktorijā failu sauc file.txt,
kas ir faila nosaukums mēs piegādā kad mēs ilga OUR
Novirzīt programmu.
Pieņemsim atvērt file.txt.
Un šeit mēs varam redzēt, ka stdout no novirzīšana bija
rakstīts uz failu sauc file.txt.
Tāpēc pieņemsim palaist iepriekšējo komandu vēlreiz, bet sniedzot
dažāda ienākošā šoreiz.
Labi.
Pieņemsim to apskatīt file.txt tagad.
>> Mēs varam redzēt šeit, ka fails ir pārrakstīts, lai mūsu
oriģināls ievade nav tur vairs.
Ja mēs tā vietā vēlaties pievienot šo failu, liekot jaunais
ievades turpmāk esošajiem faila saturu, mēs varam
izmantot divas lielāka nekā apzīmējumus, nevis tikai vienu.
Mēģināsim to.
Tagad, ja mēs atveram file.txt atkal, mēs varam redzēt gan mūsu
ievades līnijas.
Dažos gadījumos mēs varētu vēlēties, lai izmestu kādu
produkciju mūsu programmā.
Nevis rakstot izeja uz failu un pēc tam dzēšot
failu, kad mēs esam darīts ar to, mēs varam rakstīt uz īpaša
failu sauc / dev / null.
Ja kaut kas ir rakstīts uz / dev/null--
vai vienkārši devnull īstermiņa -
tas tiek automātiski izdzēsti.
Tāpēc domāju par devnull par melno caurumu jūsu datiem.
>> Tāpēc tagad mēs esam redzējuši, kā lielāka nekā zīme var novirzīt
stdout, pieņemsim redzēt, kā mēs varam novirzīt standarts -
vai s-t-d-in -
analogs stdout.
Kaut funkcijas patīk printf rakstīt sauc plūsma
stdout, GetString un līdzīgām funkcijām lasīt no strauta
sauc stdin, kas, pēc noklusējuma, ir plūsma
rakstzīmes drukāti uz klaviatūras.
Mēs varam novirzīt stdin izmantojot mazāk nekā zīme, kam seko
ar filename.
Tagad, nevis pamudinot par ieejas lietotājs At The
terminālis, programma failu atvērt mēs noteikti un izmantot
tās līnijas kā priekšnodokli.
>> Paskatīsimies, kas notiek.
Lieliski.
Pirmajā rindā file.txt ir uzdrukāts uz terminālu
jo mēs esam aicinot GetString reizi.
Ja mums būtu vēl vienu zvanu uz GetString mūsu programmā,
Nākamais rindā file.txt būtu izmantots kā
ieeja uz šo aicinājumu.
Atgādināsim, ka mēs esam ne pārveidotas mūsu C programmu vispār.
Mēs esam tikai mainot to, kā mēs vadīt to.
Un arī atceros, mēs esam nav novirzīts stdout šo laiku,
tāpēc programmas izejas bija vēl
izstādīts terminālī.
Mēs varam, protams, novirzīt gan stdin
un stdout kā šis.
Tagad, file2.txt satur pirmo līniju file.txt.
>> Tātad, izmantojot šo operatoru, mēs esam spējuši izlasīt un
rakstīt no teksta failiem.
Tagad, pieņemsim redzēt, kā mēs varam izmantot produkciju vienā programmā kā
ieejas uz citu programmu.
Tātad, šeit ir vēl viens vienkāršs C programmu es
ir šeit sauc hello.c.
Kā jūs varat redzēt, tas vienkārši izvada "Čau
tur "lietotājam!.
Ja es vēlos novirzīt izmantot kā ieguldījumu izlaides sveiki -
cita programma -
Es varētu vispirms novirzīt stdout par sveiki sauc failu
input.txt, tad novirzīt stdin par novirzīt uz tajā pašā
failu - input.txt.
Lai es varētu darīt. / Sveiki> input.txt.
Nospiediet Enter, lai izpildītu šo.
Seko. / Pārorientēt <
input.txt, un izpildīt to.
Tātad, mēs varam saīsināt šo mazliet ar semikolu, kas ļauj
mums darboties divas vai vairākas komandas uz vienas līnijas.
Tāpēc es varu teikt,. / Sveiki> input.txt, semikols,
. / Novirzīt <input.txt.
>> Tātad tas darbojas, taču tas joprojām jūtas diezgan neelegants.
Es domāju, mums tiešām ir nepieciešams šo starpnieku teksta failu, kas ir
vairs nav nepieciešama pēc novirzīt reisi?
Par laimi, mēs varam izvairīties no šīs papildu teksta failu, izmantojot to, kas ir
sauc caurules.
Ja es saku, / sveiki |.. / Pārorientēt, tad stdout par
Programma pa kreisi -
Šajā gadījumā, sveiki -
tiks izmantots kā standarta ieeja
programma par tiesībām.
Šajā gadījumā, novirzīt. Tāpēc pieņemsim palaistu šo.
>> Tur mums iet.
Mēs varam redzēt, ka Sveiki produkcija tika izmantota kā ievadi
par novirzīt.
Ar rindu komandas kopā, izmantojot caurules, mēs veidojam to, kas ir
sauc cauruļvads, jo mūsu produkcija ir galvenokārt pārvietojas
caur secīgiem komandas.
Izmantojot caurules, mēs varam darīt daži cool stuff bez nepieciešamības
rakstīt jebkuru kodu vispār.
Piemēram, pieņemsim, ka mēs vēlamies zināt, cik daudz faili ir
iekšpusē šajā direktorijā.
Izmantojot caurules, mēs varam apvienot ls komanda ar WC -
vai WordCount -
komandu.
Ls būs izejas katru failu direktorijā stdout, un
wc pateiks mums, cik līnijām tika dota ar to, izmantojot stdin.
Tātad, ja mēs sakām Ls | WC-L -
piegādā-L karodziņu wc pateikt to, lai saskaitītu rindiņas -
mēs varam redzēt, cik tieši daudz faili ir
pašreizējā direktorijā.
>> Tāpēc pieņemsim to apskatīt vēl viens piemērs.
Man šeit failu sauc students.txt,
sarakstu ar vārdiem.
Tomēr šie vārdi nav jebkādā secībā to visu, un tas izskatās
tāpat daži vārdi atkārtojas.
Ko mēs vēlamies, ir saraksts ar unikālu nosaukumi alfabētiskā
Lai, saglabāt failā sauc final.txt.
Mēs varētu, protams, uzrakstīt C programmu, lai to izdarītu mums.
Bet tas notiek, lai saņemtu nevajadzīgi
sarežģīta diezgan ātri.
Pieņemsim vietā izmantot caurules un daži Iebūvētā rīkus, lai atrisinātu
šī problēma.
>> Pirmā lieta, kas mums jādara, ir lasīt failu students.txt.
Kaķis komanda darīs tikai to.
Tas būs lasīt noteiktajā failu un rakstīt
tās saturs stdout.
Kad mēs esam lasīt teksta failu, mēs
vēlaties kārtot vārdus.
Kārtot komanda var rīkoties šo par mums.
Kārtot būs izejas līniju ko sniegusi stdin stdout
kas sakārtoti secībā.
Lai sniegtu saturu students.txt līdz
kārtot s stdin, mēs varētu izmantot caurules, lai apvienotu kaķi un kārtot.
Lai es varētu izpildīt kaķu students.txt | kārtot un
nospiediet taustiņu Enter.
Un tagad mēs redzam saturu students.txt jo
alfabēta secībā.
>> Tāpēc pieņemsim pievienot citu komandu -
Uniq, vai unikāls -
mūsu cauruļvadu.
Kā jūs varētu uzminēt, uniq padevi, sakārtoti secību
līnijas caur stdin, būs izejas unikālu līnijas.
Tāpēc tagad mums ir kaķis students.txt
| Šķirot | uniq.
Visbeidzot, mēs varam saglabāt izejas cauruļvada
failu, izmantojot kaķu students.txt | Sakārtot | uniq
> Final.txt.
Tātad, ja mēs atvērt final.txt, mums ir tieši tas, ko mēs bijām
meklē:
sarakstu unikālu nosaukumu alfabētiskā secībā,
saglabāts teksta failā.
Starp citu, mēs arī varētu būt teica kārtošanas <
students.txt | uniq> final.txt darīt tieši
pats, izmantojot katru no operatoru, mēs esam redzējuši
Šis video.
>> Mans vārds ir Tommy, un tas ir CS50.