[Powered by Google Translate] TOMMY: Yn y fideo, byddwn yn dysgu am
ailgyfeirio a phibellau.
Hyd yn hyn, rydym wedi bod yn defnyddio swyddogaethau hoffi printf i
data allbwn i'r derfynell a swyddogaethau fel GetString
er mwyn caniatáu i'r defnyddiwr i roi mewnbwn i'n
rhaglen gan ddefnyddio bysellfwrdd.
Gadewch i ni yn gyflym yn cymryd golwg ar raglen sy'n cael llinell o
mewnbwn gan y defnyddiwr ac yna allbynnau hynny.
>> Ar llinell 7, rydym yn annog y defnyddiwr i gael llinyn, ac yn
Yna, ar llinell 8, rydym yn argraffu yn ôl allan.
Gadewch i ni lunio a rhedeg ein rhaglen.
Great.
Mae'r llinyn rydym yn darparu Ategwyd ôl
i ni yn y derfynfa.
Digwyddodd hyn oherwydd bod y swyddogaeth printf ysgrifennodd i
ffrwd galw allan safonol, neu s-t-d-allan.
Pan fydd rhywbeth yn ei ysgrifennu i stdout, mae'n ddiofyn
a ddangosir gan y derfynell.
>> Felly dyna i gyd yn dda ac yn dda, ond beth os, yn hytrach na dim ond
arddangos y llinyn, rydym yn awyddus i gadw ar ffeil?
Er enghraifft, efallai y byddwn eisiau cofio yn union beth yw ein
rhaglen oedd pan fyddwn rhoddodd mewnbwn benodol yn hwyrach.
Un dull fyddai gwneud hyn yn ein C rhaglen, gan ddefnyddio
rhai swyddogaethau arbennig ar gyfer ysgrifennu at ffeiliau gallwn eich
gweld yn fideo arall.
Hyd yn oed yn haws, er y byddai, fyddai rhywsut
ailgyfeirio stdout i ffeil.
Y ffordd honno, pan printf yn ysgrifennu at stdout, y cynnwys yn
yn cael ei ysgrifennu i ffeil yn hytrach nag
a ddangosir gan y derfynell.
Gallwn wneud hynny drwy ychwanegu arwydd mwy-na, ac yna
gan enw ffeil, i'r gorchymyn a ddefnyddir gennym i weithredu ein rhaglen.
>> Felly, yn hytrach na dim ond gweithredu. / Ailgyfeirio, gallwn
rhedeg. / ailgyfeirio, wedi'i ddilyn gan fwy nag arwydd, wedi'i ddilyn gan
filename, fel file.txt.
Gadewch i ni weld beth sy'n digwydd.
OK.
Sylwch fod y cyfnod hwn, nid oes dim yn cael ei arddangos yn y derfynfa,
ond nid ydym wedi addasu'r cynnwys ein
C rhaglen o gwbl.
Gadewch i ni nawr yn archwilio'r cynnwys y cyfeirlyfr hwn gyda ls.
>> Mae pob hawl.
Erbyn hyn mae gennym ffeil newydd yn ein cyfeiriadur o'r enw file.txt,
sef yr enw ffeil rydym yn darparu pan fyddwn yn rhedeg ein
Ailgyfeirio rhaglen.
Gadewch i ni agor file.txt.
Ac yma, gallwn weld bod y stdout allan o ailgyfeirio oedd
ysgrifennu at y ffeil o'r enw file.txt.
Felly, gadewch i ni redeg y gorchymyn blaenorol eto, ond chyflenwi
mewnbwn wahanol y tro hwn.
Iawn.
Gadewch i ni edrych ar file.txt awr.
>> Gallwn weld yma fod y ffeil wedi bod overwritten, felly mae ein
nid y cyfraniad gwreiddiol yno anymore.
Os ydym yn hytrach yn dymuno atodi i'r ffeil hon, gan roi'r newydd
mewnbwn isod beth oedd cynnwys presennol y ffeil, gallwn
ddefnyddio dau yn fwy-nag arwyddion yn hytrach na dim ond un.
Gadewch i ni geisio hynny.
Yn awr, os ydym yn agor file.txt eto, ni allwn weld y ddau o'n
llinellau mewnbwn.
Mewn rhai achosion, efallai y byddwn am gael gwared unrhyw
allbwn ein rhaglen.
Yn hytrach nag ysgrifennu allbwn i ffeil ac yna dileu
y ffeil pan fyddwn ni'n ei wneud ag ef, gallwn ysgrifennu at arbennig
ffeil o'r enw / dev / null.
Pan fydd unrhyw beth wedi ei ysgrifennu i / dev/null--
neu dim ond devnull yn fyr -
ei waredu yn awtomatig.
Felly meddyliwch am devnull fel twll du ar gyfer eich data.
>> Felly, nawr rydym wedi gweld sut y gall yr arwydd mwy na ailgyfeirio
stdout, gadewch i ni weld sut y gallwn ailgyfeirio safonol mewn -
neu s-t-d-in -
y analog stdout.
Er swyddogaethau yn hoffi printf ysgrifennu at y nant a elwir yn
stdout, GetString a swyddogaethau tebyg yn darllen o'r ffrwd
a elwir yn stdin, sydd, yn ddiofyn, yw'r ffrwd
cymeriadau teipio ar y bysellfwrdd.
Gallwn ailgyfeirio stdin ddefnyddio llai na arwydd, yn dilyn
gan enw ffeil.
Yn awr, yn hytrach nag annog y defnyddwyr ar gyfer mewnbwn yn y
terfynol, bydd rhaglen agor y ffeil i ni bennu a defnyddio
ei linellau fel mewnbwn.
>> Gadewch i ni weld beth sy'n digwydd.
Great.
Mae'r llinell gyntaf o file.txt wedi cael ei argraffu i'r derfynell
oherwydd ein bod yn galw GetString unwaith.
Os ydym cafodd alwad arall i GetString yn ein rhaglen, y
Byddai llinell nesaf o file.txt wedi cael eu defnyddio fel
mewnbwn i'r alwad honno.
Unwaith eto, nid ydym wedi addasu ein rhaglen C o gwbl.
Rydym yn unig yn newid y ffordd rydym yn rhedeg y.
Ac hefyd gofio, nid ydym wedi ailgyfeirio stdout y tro hwn,
felly mae'r allbwn y rhaglen yn dal i
harddangos yn y derfynfa.
Gallwn, wrth gwrs, ailgyfeirio ddau stdin
a stdout fel hyn.
Yn awr, file2.txt yn cynnwys y llinell gyntaf o file.txt.
>> Felly, gan ddefnyddio'r hyn gweithredwyr, rydym wedi gallu i ddarllen a
ysgrifennu o ffeiliau testun.
Nawr, gadewch i ni weld sut y gallwn ddefnyddio'r allbwn o un rhaglen fel
mewnbwn i raglen arall.
Felly dyma un arall raglen C syml yr wyf
wedi galw yma hello.c.
Fel y gwelwch, mae hyn yn syml allbynnau "Hi
yno! "i'r defnyddiwr.
Os ydw i eisiau ailgyfeirio i'w defnyddio fel mewnbwn allbwn helo -
raglen arall -
Gallai tro cyntaf i mi ailgyfeirio y stdout o helo wrth y ffeil o'r enw
input.txt, yna ailgyfeirio'r stdin o ailgyfeirio i'r un
file - input.txt.
Felly gallaf ei wneud. / Helo> input.txt.
Gwasgwch Enter i weithredu hyn.
Ddilyn gan. / Ailgyfeirio <
input.txt, a gweithredu hynny.
Felly gallwn fyrhau'r darn yma a gyda hanner colon, sy'n caniatáu
ni i redeg dau neu fwy o orchmynion ar yr un llinell.
Felly gallaf ddweud,. / Helo> input.txt, hanner colon,
. / Ailgyfeirio <input.txt.
>> Felly, mae hyn yn gweithio, ond mae'n dal yn teimlo 'n bert inelegant.
Yr wyf yn golygu, a oes arnom angen y cyfryngwr ffeil testun sy'n
bellach yn angenrheidiol ar ôl ailgyfeirio yn rhedeg?
Yn ffodus, gallwn osgoi y ffeil destun ychwanegol gan ddefnyddio yr hyn sy'n
alw'n bibell.
Os dywedaf, / helo |.. / Ailgyfeirio, yna bydd y stdout o
y rhaglen ar y chwith -
yn yr achos hwn, helo -
yn cael ei defnyddio fel mewnbwn safonol ar gyfer y
rhaglen ar y dde.
Yn yr achos hwn, ailgyfeirio. Felly, gadewch i ni redeg hyn.
>> Dyna ni.
Gallwn weld bod y cynnyrch o helo yn cael ei ddefnyddio fel y mewnbwn
gyfer ailgyfeirio.
Drwy stringing gorchmynion at ei gilydd gan ddefnyddio pibellau, rydym yn eu ffurfio beth
a elwir yn biblinell, gan fod ein cynnyrch yn cael ei hanfod yn symud
drwy ddilyniant o orchmynion.
Gan ddefnyddio pibellau, gallwn wneud rhai pethau oer heb fod angen
ysgrifennu unrhyw god o gwbl.
Er enghraifft, gadewch i ni ddweud ein bod eisiau gwybod faint o ffeiliau
y tu mewn y cyfeirlyfr hwn.
Gan ddefnyddio pibell, gallwn gyfuno 'r archa ls gyda'r wc -
neu wordcount -
gorchymyn.
Bydd ls allbynnu pob ffeil yn y cyfeiriadur i stdout, a
Bydd toiled ddweud wrthym faint o linellau roddwyd iddo trwy stdin.
Felly, os ydym yn dweud ls | wc-l -
cyflenwi'r-l faner i toiled i ddweud iddo gyfrif llinellau -
gallwn weld yn union faint o ffeiliau
yn y cyfeiriadur cyfredol.
>> Felly, gadewch i ni edrych ar un enghraifft mwy.
Gennyf yma ffeil o'r enw students.txt,
gyda rhestr o enwau.
Fodd bynnag, nid yw'r enwau mewn unrhyw drefn i gyd, ac mae'n edrych
fel ychydig enwau yn cael eu hailadrodd.
Yr hyn yr ydym ei eisiau yw rhestr o enwau unigryw yn nhrefn yr wyddor
gorchymyn, cadw ar ffeil o'r enw final.txt.
Gallem, wrth gwrs, ysgrifennu rhaglen C i wneud hyn i ni.
Ond mae'n mynd i gael ddiangen
cymhleth yn weddol gyflym.
Gadewch i ni yn lle defnyddio pibellau a rhai adeiledig-yn-offer i ddatrys
broblem hon.
>> Y peth cyntaf mae angen i ni ei wneud yw darllen y students.txt ffeil.
Bydd y gorchymyn cath wneud hynny.
Bydd yn darllen yn y ffeil a nodwyd ac ysgrifennu
ei gynnwys i stdout.
Ar ôl i ni wedi darllen y ffeil testun, gallwn eich
awyddus i ddatrys yr enwau.
Gall y gorchymyn fath ymdrin â hyn i ni.
Bydd Trefnu yn allbynnu y llinell a gyflenwir drwy stdin i stdout
er mwyn datrys.
Er mwyn darparu cynnwys students.txt i
stdin fath, gallai rydym yn defnyddio pibell i gyfuno cath a didoli.
Felly gallaf weithredu gath students.txt | didoli a
gwasgwch Enter.
Ac yn awr, rydym yn gweld y cynnwys students.txt yn
nhrefn yr wyddor.
>> Felly, gadewch i ni ychwanegu un arall orchymyn -
uniq, neu unigryw -
i'n biblinell.
Fel y gallech ddyfalu, uniq, pan gaiff ei gyflenwi cyfres datrys o
llinellau drwy stdin, yn allbynnu llinellau unigryw.
Felly, nawr rydym wedi students.txt gath
| Didoli | uniq.
Yn olaf, gallwn arbed allbwn y gweill i
ffeil drwy cath students.txt | didoli | uniq
> Final.txt.
Felly, os ydym yn agor i fyny final.txt, mae gennym yr union beth yr oeddem yn
chwilio am:
rhestr o enwau unigryw yn nhrefn yr wyddor,
arbed i ffeil destun.
Gyda llaw, rydym gallai hefyd wedi dweud fath <
students.txt | uniq> final.txt i wneud yn union
yr un peth, gan ddefnyddio pob un o'r gweithredwyr ydym wedi gweld yn
y fideo hwn.
>> Fy enw i yw Tommy, ac mae hyn yn CS50.