Tip:
Highlight text to annotate it
X
[Powered by Google Translate] Tommy: Katika video hii, tutaweza kujifunza kuhusu
imetuma na mabomba.
Hadi sasa, tumekuwa kutumia kazi like printf kwa
pato data terminal na kazi kama GetString
kuruhusu user kutoa pembejeo kwa wetu
programu kwa kutumia keyboard.
Hebu haraka kuangalia mpango kwamba anapata mstari wa
pembejeo kutoka kwa mtumiaji na kisha matokeo yake.
>> On line 7, sisi ni uvuvio mtumiaji kwa kamba, na
kisha juu ya mstari 8, sisi ni uchapishaji nyuma nje.
Hebu kukusanya na kuendesha programu yetu.
Mkuu.
kamba sisi zinazotolewa yalirejewa nyuma
na sisi katika terminal.
Hii ilitokea kwa sababu kazi printf aliandika kwa
mkondo kuitwa kiwango nje, au s-t-d-nje.
Wakati kitu imeandikwa kwa stdout, ni kwa default
visas kwa wastaafu.
>> Basi hiyo ni vizuri wote na nzuri, lakini kile kama, badala ya tu
kuonyesha kamba, sisi alitaka kuokoa kwa faili?
Kwa mfano, sisi kutaka kukumbuka nini hasa wetu
mpango alifanya wakati sisi akampa pembejeo fulani baadaye.
Mmoja mkabala itakuwa kufanya hili katika mpango wetu C, kwa kutumia
baadhi ya kazi maalum kwa ajili ya kuandika kwa files kwamba tutaweza
kuona katika video nyingine.
Hata rahisi, ingawa, itakuwa namna fulani
redirect stdout na faili.
Kwa njia hiyo, wakati printf anaandika kwa stdout, yaliyomo mapenzi
kuandikwa na faili kuliko
visas kwa wastaafu.
Tunaweza kufanya hivyo tu kwa kuongeza ishara kubwa zaidi-kuliko, ikifuatiwa
na jina la faili, kwa amri ya sisi kutumia ili kutekeleza mpango wetu.
>> Hivyo, badala ya utekelezaji / redirect., Tunaweza
kukimbia /. redirect, ikifuatiwa na zaidi ya ishara, ikifuatiwa na
filename, kama file.txt.
Hebu kuona nini kinatokea.
OK.
Taarifa kwamba wakati huu, hakuna kitu visas terminal,
lakini hatuna iliyopita yaliyomo wetu
C mpango wakati wote.
Hebu sasa kuchunguza yaliyomo ya saraka hii na ls.
>> Wote haki.
Sisi sasa una faili mpya katika saraka yetu iitwayo file.txt,
ambayo ni jina la faili sisi hutolewa wakati sisi mbio zetu
Redirect mpango.
Hebu kufungua file.txt.
Na hapa, tunaweza kuona kwamba stdout nje ya redirect ilikuwa
imeandikwa na faili inayoitwa file.txt.
Basi hebu kukimbia amri ya awali tena, lakini kusambaza
mbalimbali pembejeo wakati huu.
Sawa.
Hebu tuangalie file.txt sasa.
>> Tunaweza kuona hapa kwamba faili imekuwa overwritten, hivyo wetu
pembejeo awali si huko tena.
Kama sisi badala wanataka append na faili hili, kuweka mpya
pembejeo chini ya yaliyomo ya faili zilizopo, tunaweza
kutumia wawili ishara kubwa zaidi-kuliko badala ya moja tu.
Hebu jaribu hilo.
Sasa, kama sisi kufungua file.txt tena, tunaweza kuona wote wa wetu
pembejeo mistari.
Katika baadhi ya matukio, sisi kutaka kuondokana yoyote
pato la programu yetu.
Badala ya kuandika pato kwa faili na kisha kufuta
faili wakati sisi ni kufanyika kwa hiyo, tunaweza kuandika maalum
faili inayoitwa / Dev / null.
Wakati chochote imeandikwa kwa / dev/null--
au tu kwa kifupi devnull -
ni moja kwa moja kuondolewa.
Hivyo kufikiria devnull kama shimo nyeusi kwa data zako.
>> Hivyo sasa tumeona jinsi ishara kubwa zaidi kuliko unaweza redirect
stdout, hebu angalia jinsi gani tunaweza kuelekeza kiwango katika -
s-au t-d-katika -
analog ya stdout.
Wakati kazi kama printf kuandika mkondo kuitwa
stdout, GetString na majukumu sawa kusoma kutoka mkondo
kuitwa stdin, ambayo, kwa default, ni mkondo wa
wahusika typed katika keyboard.
Tunaweza redirect stdin kutumia chini ya ishara, ikifuatiwa
na jina la faili.
Sasa, badala ya uvuvio mtumiaji kwa ajili ya pembejeo katika
terminal, programu hiyo kufungua faili sisi maalum na kutumia
mistari yake kama pembejeo.
>> Hebu kuona nini kinatokea.
Mkuu.
mstari wa kwanza wa file.txt limechapishwa kwa terminal
kwa sababu sisi ni wito GetString mara moja.
Kama tulikuwa na mwingine wito kwa GetString katika mpango wetu,
line ya pili ya file.txt ingekuwa kutumika kama
pembejeo kwa wito huo.
Tena, sisi si iliyopita C mpango wetu wakati wote.
Sisi ni tu kubadilisha jinsi sisi kukimbia.
Na pia kumbuka, sisi si itaelekezwa stdout wakati huu,
hivyo pato la programu hiyo bado
kuonyeshwa katika terminal.
Tunaweza, bila shaka, redirect wote stdin
na stdout kama hii.
Sasa, file2.txt ina mstari wa kwanza wa file.txt.
>> Hivyo, kwa kutumia kampuni za hizi, tumekuwa na uwezo wa kusoma na
kuandika kutoka Nakala files.
Sasa, hebu angalia jinsi gani tunaweza kutumia pato la programu moja kama
pembejeo kwa mpango mwingine.
Hivyo hapa ni rahisi mwingine C mpango mimi
kuwa hapa aitwaye hello.c.
Kama unaweza kuona, hii tu matokeo "Hi
huko "! kwa mtumiaji.
Kama nataka redirect kwa kutumia pembejeo kama pato la Hello -
mpango mwingine -
Mimi nilikuwa kwanza redirect stdout ya hello faili inayoitwa
input.txt, kisha kuelekeza stdin ya redirect kwa hiyo
faili - input.txt.
Hivyo siwezi kufanya / hujambo> input.txt..
Vyombo vya habari Enter nitafanya hili.
Ikifuatiwa na. / Redirect <
input.txt, na nitafanya hivyo.
Hivyo tunaweza kufupisha hii kidogo kwa semicolon, ambayo inaruhusu
sisi kukimbia amri mbili au zaidi juu ya mstari huo.
Hivyo naweza kusema,. / Hujambo> input.txt, semicolon,
. / Redirect > Hivyo hii kazi, lakini bado anahisi pretty inelegant.
I mean, je kweli tunahitaji hii Nakala mwangalizi faili hilo
muhimu tena baada ya redirect anaendesha?
Kwa bahati nzuri, tunaweza kuepuka hili ziada Nakala faili kwa kutumia nini
aitwaye bomba.
Nikisema, / hujambo |.. / Redirect, basi stdout ya
mpango wa kushoto -
katika kesi hii, hujambo -
zitatumika kama pembejeo kwa kiwango
mpango juu ya haki.
Katika kesi hii, na kuelekeza. Basi hebu kukimbia hii.
>> Kuna sisi kwenda.
Tunaweza kuona kwamba pato la hujambo ilitumika kama pembejeo
kwa kuelekeza.
Kwa stringing amri pamoja kwa kutumia mabomba, sisi kuunda nini
aitwaye bomba, tangu pato yetu kimsingi ni kusonga
kupitia kwenye mlolongo wa amri.
Kutumia mabomba, tunaweza kufanya baadhi ya mambo ya baridi bila wanaohitaji
kuandika code yoyote wakati wote.
Kwa mfano, hebu kusema tunataka kujua jinsi wengi files ni
ndani ya saraka hii.
Kutumia bomba, tunaweza kuchanganya amri ls na WC -
au wordcount -
amri.
Ls itakuwa pato kila faili katika saraka stdout, na
WC kutuambia jinsi mistari wengi wamepewa hiyo kupitia stdin.
Hivyo, kama sisi kusema ls | WC-l -
kusambaza-l bendera ya WC kuiambia kuhesabu mistari -
tunaweza kuona hasa jinsi wengi files ni
katika saraka ya sasa.
>> Basi hebu tuangalie mfano mmoja zaidi.
Mimi hapa faili inayoitwa students.txt,
pamoja na orodha ya majina.
Hata hivyo, majina haya si katika amri yoyote yote, na inaonekana
kama majina machache yamerudiwa.
Tunachotaka ni orodha ya majina ya kipekee katika alfabeti
ili, kuokolewa na faili inayoitwa final.txt.
Tunaweza, bila shaka, kuandika mpango C kufanya hili kwa ajili yetu.
Lakini ni kwenda kupata unnecessarily
tata pretty haraka.
Hebu badala yake kutumia mabomba na baadhi ya kujengwa katika zana-kutatua
tatizo hili.
>> Jambo la kwanza tunahitaji kufanya ni kusoma students.txt faili.
amri paka itakuwa kufanya tu.
Itakuwa kusoma katika faili maalum na kuandika
yaliyomo yake kwa stdout.
Baada tumekuwa kusoma faili maandishi, tutaweza
unataka kutatua majina.
amri aina inaweza kushughulikia hili kwa ajili yetu.
Panga itakuwa pato mstari hutolewa kupitia stdin kwa stdout
ili Iliyopangwa.
Ili ugavi yaliyomo ya students.txt kwa
stdin aina ya, tunaweza kutumia bomba kwa kuchanganya na paka na aina.
Hivyo siwezi nitafanya paka students.txt | aina na
waandishi wa habari kuingia.
Na sasa, tunaona yaliyomo katika students.txt
alfabeti utaratibu.
>> Basi hebu kuongeza mwingine amri -
uniq, au kipekee -
kwenye bomba yetu.
Kama unaweza guess, uniq, wakati hutolewa mlolongo sorted ya
mistari kupitia stdin, itakuwa pato mistari ya kipekee.
Hivyo basi, tuna paka students.txt
| Aina | uniq.
Hatimaye, tunaweza kuokoa pato la bomba hadi
faili kupitia paka students.txt | aina | uniq
> Final.txt.
Hivyo, kama sisi kufungua final.txt, tuna nini hasa sisi walikuwa
kuangalia kwa:
orodha ya majina ya kipekee katika herufi,
kuokolewa na faili asilia.
Kwa njia, sisi pia inaweza kuwa alisema aina <
students.txt | uniq> final.txt kufanya hasa
kitu kimoja, kutumia kila moja ya kampuni za tumeona katika
hii video.
>> Jina langu ni Tommy, na hii ni CS50.