Tip:
Highlight text to annotate it
X
[Powered by Google Translate] TOMMY: Í þetta myndband, munum við læra um
Áframsendi og rör.
Svo langt, höfum við verið að nota virka eins printf til
framleiðsla gögn til stöðvarinnar og aðgerðir eins GetString
til að leyfa notanda að leggja til okkar
forrit að nota lyklaborðið.
Við skulum taka fljótt að líta á forrit sem fær línu
inntak frá notanda og þá framleiðsla það.
>> Á línu 7, við erum vekur notanda fyrir streng og
þá á línu 8, erum við prentun það út aftur.
Við skulum taka saman og hlaupa program okkar.
Frábært.
The band við sem var echoed baka
okkur í flugstöðinni.
Þetta gerðist vegna þess að printf virka skrifaði a
Stream kallast staðall út, eða s t-D-út.
Þegar eitthvað er skrifað á stdout, það er sjálfgefið
birtist við flugstöðina.
>> Svo er það allt vel og gott, en hvað ef, í stað þess einfaldlega að
sýna band, vildum við að vista það í skrá?
Til dæmis gætum við viljum að muna nákvæmlega hvað okkar
program gerði þegar við gaf ákveðna inntak síðar.
Ein leið væri að gera þetta í C program okkar, með því að nota
sumir sérstakar aðgerðir til að skrifa í skrár sem við munum
sjá í öðru vídeó.
Jafnvel auðveldara, þó væri að einhvern veginn
beina stdout í skrá.
Þannig þegar printf skrifar til stdout, innihald mun
að skrifa í skrá frekar en
birtist við flugstöðina.
Við getum gert bara með því að bæta meiri en tákn, eftir
með skrá nafn, að stjórn sem við notum til að framkvæma kerfi okkar.
>> Svo, frekar en einfaldlega framkvæmd. / Áframsenda, getum við
hlaupa. / áframsenda, eftir meiri en tákn, eftir
filename, eins file.txt.
Við skulum sjá hvað gerist.
OK.
Takið eftir að þessi tími var ekkert birtist á flugstöðinni,
en við höfum ekki breytt innihaldi OKKAR
C program yfirleitt.
Við skulum nú skoða innihald þessa skrá með LS.
>> Allt í lagi.
Við höfum nú nýja skrá í möppu okkar heitir file.txt,
sem er að skrá nafn við staðar þegar við hljóp starfsemi okkar
Beina program.
Við skulum opna file.txt.
Og hér getum við séð að stdout út af endurvísa var
skrifað í skrá sem kallast file.txt.
Svo skulum hlaupa fyrri stjórn aftur, en veita
mismunandi inntak þessa tíma.
Allt í lagi.
Við skulum taka a líta á file.txt núna.
>> Við sjáum hér að skrá hefur verið skrifað yfir hana, svo að okkar
upprunalega inntak er ekki þar lengur.
Ef við viljum í staðinn til að bæta við þessa skrá, setja nýja
inntak fyrir neðan núverandi innihald af the skrá, getum við
nota tvær meiri en merki í staðinn af réttlátur einn.
Við skulum reyna það.
Nú, ef við opna file.txt aftur, getum við séð bæði af okkar
inntakslínur.
Í sumum tilvikum gæti við viljum Fargið
framleiðsla á prógramminu.
Frekar en að skrifa framleiðsla skrá og þá að eyða
að skrá þegar við erum búin með það, við getum skrifað á sérstakt
skrá sem heitir / dev / null.
Þegar eitthvað er skrifað á / dev/null--
eða bara devnull fyrir stuttu -
það er sjálfkrafa hent.
Svo hugsa um devnull sem svarthol fyrir gögnin þín.
>> Svo nú höfum við séð hvernig meiri en tákn getur endurvísa
stdout, við skulum sjá hvernig við getum sent staðall í -
eða s t-D-í -
að hliðstæða stdout.
Þótt aðgerðir eins og printf skrifa ána heitir
stdout, GetString og svipaðar aðgerðir lesa úr straumi
heitir stdin, sem sjálfgefið er straumi
stafir slegið á lyklaborðinu.
Við getum sent stdin með minna en merki, eftir
með filename.
Nú, frekar en vekur notandi til inntak á the
Terminal, forrit mun opna skrána við tilgreint og nota
línur sem inntak.
>> Við skulum sjá hvað gerist.
Frábært.
Fyrsta línan í file.txt hefur verið prentað í flugstöðinni
vegna þess að við köllum GetString einu.
Ef við hefðum annað símtal til GetString í kerfi okkar,
Næsta lína af file.txt hefði verið notuð sem
inntak til að hringja.
Aftur höfum við ekki breytt C program okkar yfirleitt.
Við erum bara að breyta því hvernig við að keyra það.
Og líka að muna, að við höfum ekki vísað stdout þessum tíma,
þannig að framleiðsla af the program var enn
birtist á skjánum.
Við getum að sjálfsögðu beina bæði stdin
og stdout svona.
Nú file2.txt inniheldur fyrstu línu file.txt.
>> Svo notaði þessara fyrirtækja, höfum við verið fær um að lesa og
skrifa af skrá texta.
Nú, við skulum sjá hvernig við getum notað úttak eitt forrit sem
inntak í annað forrit.
Svo er hér ein einföld C forrit ég
hafa hér kallað hello.c.
Eins og þú geta sjá, þetta framleiðsla einfaldlega "Hi
Það "til notanda.
Ef ég vil beina til að nota sem inntak úttak Hello -
annað forrit -
Ég gat fyrst beina stdout af halló skrá sem kallast
input.txt, þá beina stdin af endurvísa að sama
skrá - input.txt.
Svo ég get gert. / Hello> input.txt.
Ýttu á Enter til að framkvæma þetta.
Framhald af. / Áframsenda <
input.txt, og framkvæma það.
Þannig að við getum dregið þetta aðeins með semíkommu, sem gerir
okkur til að keyra tvo eða fleiri skipanir á sömu línu.
Svo get ég sagt,. / Halló> input.txt, semíkommu,
. / Áframsenda > Þannig að þetta virkar, en mér finnst samt ansi inelegant.
Ég meina, við þurfum í raun þennan texta milliliður skrá sem er
ekki lengur þörf eftir endurvísa keyrir?
Sem betur fer, getum við forðast þennan auka texta skrá með hvað er
kallast pípa.
Ef ég segi, / halló |.. / Áframsenda, þá stdout af
Dagskráin á vinstri -
í þessu tilfelli, halló -
verður notuð sem standard input for the
forrit til hægri.
Í þessu tilfelli, endurvísa. Svo skulum hlaupa þetta.
>> Svona.
Við sjáum að framleiðsla á hello var notað sem inntak
fyrir beina.
Með stringing skipanir saman með pípur, mynda við hvað er
kallað leiðsla, þar sem framleiðsla okkar er í raun að flytja
gegnum röð af skipunum.
Using rör, getum við gert smá flott efni án þess að þurfa að
skrifa allir kóðann á öllum.
Til dæmis, segjum skulum við viljum að vita hversu margar skrár eru
inni í þessari möppu.
Using pípu, getum við sameinað LS stjórn með wc -
eða wordcount -
stjórn.
LS mun framleiðsla hverja skrá í möppu til stdout og
wc mun segja okkur hversu margar línur voru gefin til þess í gegnum stdin.
Svo ef við segjum LS | wc-L -
gefa upp-l fána að wc að segja það að telja línur -
getum við séð nákvæmlega hversu margar skrár eru
í núverandi möppu.
>> Svo skulum taka a líta á einn fleiri dæmi.
Ég hef hér til skrá sem kallast students.txt,
með lista af nöfnum.
Hins vegar eru þessi nöfn ekki í hvaða röð það allt, og það lítur út
eins nokkur nöfn eru endurtekin.
Það sem við viljum er listi yfir einstök nöfn í stafrófsröð
þess, vistuð í skrá sem heitir final.txt.
Við gætum að sjálfsögðu skrifa C forrit til að gera þetta fyrir okkur.
En það er að fara að fá að óþörfu
flókið ansi fljótt.
Við skulum nota í staðinn pípur og sumir innbyggður-í-verkfæri til að leysa
þetta vandamál.
>> The fyrstur hlutur sem við þurfum að gera er að lesa skrána students.txt.
Kötturinn stjórn mun gera einmitt það.
Það verður að lesa í tilgreinda skrá og skrifa
innihald hennar til stdout.
Eftir að við höfum lesið texta skrá, munum við
langar að raða nöfnum.
The konar stjórn geta séð þetta fyrir okkur.
Raða verður framleiðsla lína sem fylgir stdin til stdout
í raðað röð.
Í því skyni að veita innihald students.txt til
stdin sort er, gætum við notað pípa til að sameina kött og raða.
Þannig að ég get keyrt köttur students.txt | raða og
ýta á Enter.
Og nú sjáum við innihald students.txt í
stafrófsröð.
>> Svo skulum bæta aðra stjórn -
Uniq eða einstakt -
til verkefnastöðu.
Eins og þú might giska, Uniq, þegar það er hlaðið með raðað röð
línur gegnum stdin, mun framleiðsla á einstaka línur.
Svo nú höfum við köttur students.txt
| Tegund | Uniq.
Að lokum getum við vista framleiðsla af leiðslum til að
skrá í gegnum köttur students.txt | tegund | Uniq
> Final.txt.
Svo ef við opna final.txt, höfum við nákvæmlega hvað við vorum
að leita að:
listi yfir einstök nöfn í stafrófsröð,
vistað í textaskrá.
Við the vegur, einnig gætum við sagt eins konar <
students.txt | Uniq> final.txt að gera nákvæmlega
sama, með hverjum rekstraraðila við höfum séð í
þetta myndband.
>> Mitt nafn er Tommy, og þetta er CS50.