[Powered by Google Translate] [It-Taqsima 5 - aktar komdi]
[Rob Bowden - Università ta 'Harvard]
[Dan huwa CS50. - CS50.TV]
>> Like I said fil-email tiegħi, hemm ħafna affarijiet li inti tista 'tuża
minbarra l-apparat li fil-fatt jagħmlu l-settijiet problema.
Nirrakkomandaw li inti tagħmel dan fil-appliance biss għaliex allura nistgħu aktar faċilment jgħinuk
u nafu kif kollox ikun sejjer jaħdem.
Imma kif eżempju wieħed ta 'fejn inti tista' tagħmel affarijiet jekk, ngħidu aħna, inti ma għandekx aċċess
ma 'strument jew inti tixtieq taħdem fil-kantina Ċentru tax-Xjenza -
li attwalment ikollhom l-appliance wisq -
jekk inti tixtieq taħdem kullimkien.
Eżempju wieħed huwa qatt raw / semgħu SSH?
SSH huwa bażikament bħad jgħaqqdu għal xi ħaġa.
Fil-fatt, id-dritt issa jien SSHed fis-appliance.
I qatt jaħdmu direttament fil-appliance.
Hawn hu l-appliance, u jekk inti tfittex l isfel hawn tara dan l-indirizz IP.
I qatt jaħdmu fl-appliance nnifisha;
Jien dejjem jiġu trasferiti lil iTerm2 tieqa / terminal tieqa.
Tista 'SSH għal dak l-indirizz IP, ssh jharvard@192.168.129.128.
Niftakar dak in-numru faċilment għaliex dan huwa tali mudell sbieħ.
Iżda li se jistaqsu lili għal password tiegħi, u issa jien fil-appliance.
Bażikament, f'dan il-punt, jekk inti fetħet terminal ġewwa tal-apparat innifsu,
din l-interfaċċa, madankollu inti tużaha, huwa eżattament l-istess
bħala l-interface jien jużaw hawn fuq imma issa int SSHed.
Inti ma għandekx SSH għall-appliance.
Eżempju wieħed ta 'post ieħor inti tista' SSH li huwa jien pretty ċert li jkollok fil-kontumaċja -
Oh. Akbar.
Kollha inti għandu jkollhom mill-kontijiet tas-SKF default fuq is-servers FAS.
Għalija, nixtieq SSH għall rbowden@nice.fas.harvard.edu.
Huwa ser jgħidlek li l-ewwel darba, u inti tgħidli iva.
Password tiegħi huwa biss se jkun password FAS tiegħi.
U hekk issa, jien SSHed għall-servers sbieħ, u I tista 'tagħmel xejn nixtieq hawn fuq.
A lott ta 'klassijiet li inti tista' tieħu, bħal 124, huma se jkollhom inti upload Jittieħed hawn
bżonn jippreżenta settijiet problema tiegħek.
Imma jgħidu inti ma għandekx aċċess għall-apparat tiegħek.
Imbagħad inti tista 'tagħmel affarijiet, bħal hawn fuq se ngħid -
Dan huwa biss is-sezzjoni tagħna ta 'mistoqsijiet.
Hija se jgħidlek biex tagħmel dan fl-appliance.
Minflok I ser biss tagħmel dan fuq is-server.
Jien ser unzip dan.
Il-problema se tkun li int użati biex jużaw xi ħaġa bħal gedit
jew kwalunkwe ġewwa ta 'l-appliance.
Int mhux se jkollhom li fuq is-server SKF.
Huwa kollha biss se tkun din l-interfaċċa testwali.
Allura inti tista 'jew wieħed, jippruvaw jitgħallmu editur test li dawn ma jkollhom.
Huma għandhom Nano.
Nano huwa normalment pjuttost faċli biex jintuża.
Tista 'tuża vleġeġ tiegħek u t-tip normalment.
Allura li mhuwiex diffiċli.
Jekk inti tixtieq li tikseb verament fancy tista 'tuża emacs,
li I probabbilment ma kellha tiftaħ minħabba I lanqas biss jafu kif tagħlaq emacs.
Kontroll X, Kontroll C? Yeah.
Jew tista 'tuża vim, li huwa dak I-użu.
U għalhekk dawn l-għażliet tiegħek.
Jekk inti ma tridx tagħmel dan, inti tista 'wkoll, jekk inti tħares lejn manual.cs50.net--
Oh.
Fuq PC, inti tista 'SSH tuża Putty,
li int ser ikollhom biex tniżżel separatament.
Fuq Mac, inti tista 'sempliċement billi Terminal użu default jew tista' tniżżel iTerm2,
li huwa bħal sbieħ, Terminal fancy.
Jekk inti tmur manual.cs50.net int ser tara link għall notepad + +,
li huwa dak li inti tista 'tuża fuq PC.
Hija ihallik SFTP mis Notepad + +, li hi bażikament SSH.
X'inhu dan ser tavżak tagħmel huwa jeditjaw fajls tiegħek lokalment,
u mbagħad kull meta inti tixtieq li tiffranka minnhom, se jiffrankaw sa nice.fas,
fejn inti tista 'mbagħad imexxuhom.
U l-ekwivalenti fuq Mac se tkun TextWrangler.
Għalhekk ihallik tagħmel l-istess ħaġa.
Hija ihallik jeditjaw fajls lokalment u tiffranka lill nice.fas,
fejn inti tista 'mbagħad imexxuhom.
Mela jekk int qatt staġnati mingħajr appliance, inti għandek dawn l-għażliet
li għadhom settijiet problema tiegħek.
Il-problema waħda se tkun li int mhux se jkollhom il-librerija CS50
għaliex nice.fas ma b'mankanza jkollhom dik.
Inti tista 'jew tniżżel il-librerija CS50 -
Ma naħsibx li għandi bżonn li f'dan il-punt.
Inti tista 'jew tniżżel il-librerija CS50 u jibagħtu kopja tagħha fuq l nice.fas,
jew Naħseb f'dan il-punt aħna ma tużah aktar xorta waħda.
Jew jekk nagħmlu, inti tista għalissa tibdilha
l-implimentazzjonijiet tal-funzjonijiet fil-librerija CS50 xorta.
Allura li m'għandux ikun li ħafna ta 'restrizzjoni.
U li li.
>> I ser imorru lura lejn il-appliance issa; aħna ser tagħmel dak kollu fil-appliance.
Ħarsa lejn is-sezzjoni tagħna ta 'mistoqsijiet, fil-bidu, bħal I qal fl-email tiegħi,
għandna biex jitkellmu dwar l-waħda qasira inti suppost kellhom jaraw.
Għandna l-indirizzar mill-ġdid & Pajpijiet u dawn it-tliet mistoqsijiet.
>> Għal liema stream ma funzjonijiet simili printf tikteb fil-kontumaċja?
Allura nixxiegħa. X'inhu nixxiegħa?
Nixxiegħa huwa bażikament simili huwa biss ftit -
Huwa lanqas sors ta '1s u 0s.
Il-fluss huwa titlob għall hawnhekk huwa l-istandard.
U hekk istandard huwa nixxiegħa li meta tikteb lilha,
jidher fuq l-iskrin.
L-Istandard, billi nixxiegħa, dan ifisser li inti biss jiktbu 1s u 0s għaliha,
u l-tarf l-ieħor ta 'l-istandard biss taqra minn dak nixxiegħa.
Huwa biss sensiela ta '1s u 0s.
Tista 'tikteb lill flussi jew tista' tinqara minn nixxiegħat
jiddependi fuq dak il-kurrent fil-fatt hu.
Il-flussi oħra default tnejn huma standard fil-u żball standard.
Standard fi huwa kull meta inti tagħmel GetString, huwa għalikom biex Jittieħed input.
Għalhekk għalikom, huwa attwalment stennija fuq standard,
li huwa verament dak ikollok meta inti tip fuq il-keyboard.
Inti ittajpjar fis istandard pulzieri
Żball standard huwa bażikament ekwivalenti għal barra standard,
iżda huwa speċjalizzati fil-li meta inti print għall-iżball standard,
int suppost biss jistampaw messaġġi ta 'żball għal dak
sabiex inti tista 'tiddistingwi bejn messaġġi regolari stampati għall-iskrin
versus messaġġi ta 'żball skont jekk dawn marru biex barra standard jew iżball standard.
Fajls wisq.
L-Istandard, standard, u l-iżball standard huma flussi biss speċjali,
imma verament kwalunkwe fajl, meta inti tiftaħ fajl, isir nixxiegħa ta 'bytes
fejn inti tista 'biss taqra minn dak nixxiegħa.
Inti, għall-parti l-kbira, tista 'biss jaħsbu ta' fajl bħala nixxiegħa ta 'bytes.
Allura flussi liema do huma jiktbu lill-kontumaċja? Standard out.
>> X'hemm differenza bejn> u >>?
Did ħadd tara l-video qabel? Okay.
> Se tkun kif inti direzzjoni ġdida fil-fajls,
u >> huwa wkoll ser idawwru l-output fis-fajls,
iżda huwa minflok tmur tehmeż għall-fajl.
Per eżempju, ejja ngħidu I jiġri li jkollhom dict dritt hawn,
u l-għalf biss ġewwa ta dict hija, qattus qattus, kelb, ħut, klieb.
Wieħed kmand li inti għandek fil-linja tal-kmand tal-qtates,
li huwa biss se jistampaw x'hemm fil-fajl.
Allura meta I say dict qattus, li għaddej biex jistampaw, qattus qattus, kelb, ħut, klieb. Li kollox qattus ma.
Dan ifisser li stampati l-istandard out, qattus qattus, kelb, ħut, klieb.
Jekk I minflok tixtieq li idawwru li għall-fajl, I jistgħu jużaw> u jagħtu direzzjoni ġdida lill ikun x'ikun l-fajl huwa.
I ser sejħa-fajl fajl.
Mela issa jekk I ls, jien ser tara I jkollhom fajl ġdida msejħa fajl.
U jekk I jiftħuh, li għaddej biex ikollhom eżattament dak qattus tpoġġi fil-linja tal-kmand.
Allura issa jekk jien tagħmel dan mill-ġdid, allura huwa għaddej biex idawwru l-output fil-fajl,
u jien ser ikollhom l-istess ħaġa eżatt.
Għalhekk teknikament, hija kompletament mwarrba dak li kellna.
U aħna ser tara jekk nibdel dict, I ħa out kelb.
Issa jekk aħna qattus dict fil-fajl mill-ġdid, aħna qed tmur biex ikollhom il-verżjoni l-ġdida bil-kelb jitneħħew.
Għalhekk kompletament tipprevali dan.
Minflok, jekk nużaw >>, li għaddej biex tehmeż fajl.
Issa, il-ftuħ fajl, naraw li għandna biss il-ħaġa istess stampat darbtejn
minħabba li kien hemm darba, allura aħna mehmuż ma 'l-oriġinali.
Allura dak hu li> u >> do.
Il-wieħed li jmiss jistaqsi - Ma jistaqsu dwar dan.
>> L-oħra li għandna huwa redirects out standard,
<Se tkun idawwru standard pulzieri
Ejja naraw jekk ikollna eżempju.
Kapaċi nikteb wieħed malajr reali.
Ejja tieħu kwalunkwe fajl, hello.c.
Relattivament sempliċi fajl.
Jien biss jkollna spag u mbagħad istampar "Hello" ikun x'ikun l-sekwenza I biss daħal kien.
Sabiex tagħmel bonjour u mbagħad. / Bonjour.
Issa huwa suġġeriment me jidħlu xi ħaġa,
li jfisser huwa stennija fuq affarijiet li għandhom jiddaħħlu fis-istandard pulzieri
So tidħol x'ikun nixtieq fis istandard pulzieri Aħna biss se ngħid Hello, Rob!
Imbagħad huwa istampar għall-istandard out Hello, Rob!
Jekk I do. / Bonjour u mbagħad jagħtu direzzjoni ġdida,
għal issa inti tista 'biss idawwru minn fajl.
Mela jekk jien jitqiegħdu f'xi fajl, txt, u nressaq Rob,
jekk I run bonjour u mbagħad jagħtu direzzjoni ġdida l-fajl txt fil. / hello, li għaddej biex jgħidu Hello, Rob! immedjatament.
Meta l-ewwel gets GetString u huwa stennija fuq standard,
standard m'għadhiex stennija fuq it-tastiera għal data li tinkiseb mdaħħla.
Minflok, għandna dirottati standard li jinqara mill-fajl txt.
U hekk li għaddej biex jinqara mill-txt fajl, li huwa biss il-Rob linja,
u mbagħad li għaddej biex jistampaw Hello, Rob!
U jekk jien ridt, I jistgħu wkoll jagħmlu. / Bonjour <txt
u allura l-istandard li l-istampar huwa, li huwa Hello, Rob!,
I jistgħu jagħtu direzzjoni ġdida li fil-fajl tagħha stess.
I ser biss sejħa-fajl bonjour - no, I mhux se, għaliex dak l-eżekutibbli - txt2.
Issa, txt2 huwa se jkollu l-output ta '. / Bonjour <txt, li se tkun Hello, Rob!
>> Mistoqsijiet?
>> Okay. Mela allura hawnhekk għandna pipeline.
Pajpijiet huma l-aħħar unità ta 'direzzjoni mill-ġdid.
>> Oh. I raden unità waħda oħra ta direzzjoni mill-ġdid hija jekk minflok ta '> inti tagħmel 2>,
li l-ridirezzjonar iżball standard.
Mela jekk xi ħaġa marru għall iżball standard, ma jkunx tikseb jitqiegħed fis txt2.
Imma avviż jekk nagħmel 2>, allura huwa għadu istampar Hello, Rob! għal-linja ta 'kmand
għaliex jien biss ridirezzjonar iżball standard, jien ma ridirezzjonar standard out.
Żball standard u l-istandard huma differenti.
Jekk int riedu li attwalment tikteb lill iżball standard,
imbagħad I jista 'jbiddel dan ikun fprintf li stderr.
Allura printf, awtomatikament, prints li l-istandard.
Jekk irrid li jistampaw biex iżball standard manwalment, imbagħad I għandhom jużaw fprintf
u tispeċifika dak li nixtieq li jistampaw sa.
Jekk minflok I ma stdout fprintf, allura dak l-bażikament ekwivalenti għal printf.
Iżda fprintf għal żball standard.
Allura issa, jekk I idawwru dan in txt2, Hello, Rob! għadu jkollna stampat fuq il-linja tal-kmand
peress li huwa jkollna stampati biex iżball standard u jien biss ridirezzjonar standard out.
Jekk I issa idawwru żball standard, issa ma jiksbu stampati, u txt2 se tkun Hello, Rob!
Allura issa, inti tista 'jistampaw żbalji attwali tiegħek għal żball standard
u tistampa messaġġi regolari tiegħek biex l-istandard.
U hekk meta inti tmexxi programm tiegħek, inti tista 'taħdem bħala. / Bonjour dan it-tip mad-2>
sabiex dak il-programm tiegħek se jaħdmu b'mod normali,
imma xi messaġġi ta 'żball li ikollok tista' tiċċekkja aktar tard fil-log żball tiegħek,
hekk żbalji, u mbagħad tfittex aktar tard u żbalji fajl tiegħek se jkollhom xi żbalji li ġara.
>> Mistoqsijiet?
>> L-aħħar wieħed huwa pajp, li inti tista 'taħseb li jittieħdu l-istandard barra minn kmand
u jagħmilha l-istandard fil-kmand ta 'wara.
Eżempju hawnhekk huwa eku hija ħaġa kmand tal-linja
li huwa biss se eku kwalunkwe nressaq bħala argument tagħha. I mhux ser tpoġġi kwotazzjonijiet.
Echo blah, blah, blah huwa biss se jistampaw blah, blah, blah.
Qabel, meta I said I kellhom jitqiegħdu Rob ġo fajl txt
minħabba I tista 'biss idawwru fajls txt, minflok, / jekk I eku Rob
u mbagħad pajpijiet fis. / hello, li se tagħmel ukoll dak l-istess tip ta 'ħaġa.
Dan qed tieħu l-output ta 'dan il-kmand, eku Rob,
u jużawha bħala l-input għal. / bonjour.
Inti tista 'taħseb li bħala l-ewwel idawwru eku Rob ġo fajl
u mbagħad kontribut lejn. / bonjour dan il-fajl li kien biss outputted.
Iżda dan jieħu l-fajl temporanju barra mill-istampa.
>> Mistoqsijiet dwar li?
>> Il-mistoqsija li jmiss se tinvolvi dan.
Liema pipeline tista 'tuża biex issib in-numru ta' ismijiet uniku fil-fajl imsejjaħ names.txt?
Il-kmandijiet aħna qed tmur jridu jużaw hawnhekk huma uniċi, hekk uniq, u mbagħad wc.
Tista 'tagħmel uniq bniedem li attwalment tħares lejn dak li ma,
u huwa biss jmorru biex filtru linji biswit tqabbil mill-input.
U l-bniedem wc se jistampaw il-newline, kelma, u l-għadd bytes għal kull fajl.
U l-aħħar wieħed aħna qed tmur biex jridu jużaw huwa tip,
li se biss tip linji ta 'fajl txt.
Jekk I jagħmlu xi fajl txt, names.txt, u huwa Rob, Tommy, Joseph, Tommy, Joseph, RJ, Rob,
dak I trid tagħmel hawnhekk huwa ssib l-għadd ta 'ismijiet uniku fil dan il-fajl.
Allura dak li għandu l-risposta tkun? >> [Student] 4. >> Yeah.
Għandu jkun ta '4 sa Rob, Tommy, Joseph, RJ huma l-ismijiet biss uniku fil dan il-fajl.
L-ewwel pass, jekk I biss do għadd kelma fuq names.txt,
dan huwa attwalment javżak me kollox.
Dan huwa attwalment l-istampar - ejja ara, bniedem wc - newlines, kliem, u għadd byte.
Jekk I biss jimpurtahom linji, imbagħad I tista 'biss tagħmel wc-l names.txt.
Allura dak il-pass 1.
Imma jien ma jridux wc-l names.txt minħabba names.txt biss fiha l-ismijiet,
u nixtieq li jiffiltraw kwalunkwe dawk mhux uniku.
Mela jekk nagħmel names.txt uniq, li ma pjuttost tagħti me dak li nixtieq
minħabba li l-ismijiet duplikati għadhom hemm.
Għaliex huwa li? Għaliex uniq ma tagħmel dak li nixtieq?
[Student] Il-duplikati ma jkunux [inaudible] >> Yeah.
Ftakar il-paġna bniedem għall uniq jgħid linji filtru tqabbil adjaċenti.
Huma qed mhux maġenb, u għalhekk mhux se filtru magħhom.
Jekk I sort lilhom l-ewwel, names.txt sort se timplimenta l-linji duplikat flimkien.
Allura issa names.txt tip hija dik.
Jien ser jridu jużaw dan bħala l-kontribut għall uniq, li huwa | uniq.
Li tagħti me Joseph, RJ, Rob, Tommy,
u nixtieq li jużaw dik il-kontribut għall WC-l,
li se tagħti me 4.
Bħall jgħid hawnhekk, dak pipeline tista 'tuża?
Tista 'tagħmel ħafna affarijiet bħall-użu ta' serje ta 'kmandi
fejn inti tuża l-output minn kmand bħala l-kontribut għall-kmand li jmiss.
Tista 'tagħmel ħafna affarijiet, ħafna affarijiet għaqlija.
>> Mistoqsijiet?
Okay.
Li lilha għall-pajpijiet u direzzjoni mill-ġdid.
>> Issa immorru fuq l-għalf attwali, l-għalf kodifikazzjoni.
Ġewwa ta 'dan PDF, tkun taf tara dan il-kmand,
u tkun taf tixtieq li tmexxi dan il-kmand fl-apparat tiegħek.
Wget huwa l-kmand għall biss jkollna xi ħaġa mill-Internet, bażikament,
hekk Wget u dan il-URL.
Jekk inti marru għal din URL fil-browser tiegħek, ikun tniżżel dan il-fajl.
I biss għafast fuqha, u għalhekk jitniżżel l-fajl għalija.
Iżda miktub Wget ta 'dik ħaġa ġewwa tat-terminal
huwa biss se tniżżel in terminali tiegħek.
Għandi section5.zip, u tkun taf tixtieq li unzip section5.zip,
li se jtik folder imsejjaħ section5,
li se jkollhom kollha tal-fajls li aħna qed tmur biex tkun qed tuża llum ġewwa ta 'dan.
Kif fajl ismijiet dawn il-programmi "jissuġġerixxu, dawn qed Buggy daqsxejn,
hekk missjoni tiegħek huwa biex insemmu għaliex bl-użu GDB.
Ma kulħadd jkollhom magħhom jitniżżel / taf kif tikseb minnhom jitniżżel
fis appliance tagħhom? Okay.
>> Running ./buggy1, se ngħid tort Segmentazzjoni (qalba mormi),
li kwalunkwe ħin ikollok segfault, hija ħaġa ħażina.
Taħt liema ċirkostanzi do ikollok segfault?
[Student] Dereferencing pointer null. >> Yeah. Allura dan huwa eżempju wieħed.
Dereferencing pointer null int ser tikseb segfault.
What a segfault ifisser huwa inti qed jmissu memorja inti m'għandekx tkun tmiss.
Allura dereferencing pointer null qed imiss indirizz 0,
u bażikament, kompjuters kollha llum ngħid li 0 indirizz tal-memorja inti m'għandekx tkun tmiss.
Allura hu għalhekk li dereferencing tirriżulta pointer nulla fi segfault.
Meta inti jiġri li ma initialize pointer, allura għandu valur żibel,
u hekk meta inti tipprova dereference dan, fil-probabbiltà kollha int jmissu memorja
dan huwa fin-nofs ta 'mkien.
Jekk jiġri li tikseb xortik tajba u l-valur taż-żibel
ġara għall-punt li x'imkien fuq il-munzell jew xi ħaġa,
allura meta inti dereference li werrej li int ma initialized,
xejn se tmur ħażin.
Imma jekk huwa tipponta għal, per eżempju, x'imkien bejn il-munzell u l-munzell,
jew huwa tipponta biss biex x'imkien li ma tkunx ġiet użata mill-programm tiegħek għadhom,
allura int jmissu memorja inti ma għandhomx ikunu jmissu u inti segfault.
Meta inti tikteb funzjoni rikursivi u recurses wisq drabi
u munzell tiegħek tikber wisq kbar u l-collides munzell fis-affarijiet
li ma għandu jkun jaħbtu ma ', int jmissu memorja inti m'għandekx tkun tmiss,
sabiex inti segfault.
Dan huwa dak li segfault hu.
>> Huwa wkoll l-istess raġuni li jekk għandek string simili -
ejja mur lura għall-programm preċedenti.
Fil hello.c--I'm biss se tagħmel xi ħaġa oħra.
char * s = "bonjour dinja!";
Jekk I użu * i = ħaġa jew i [0] = "X";
sabiex tagħmel hello,. / hello, għaliex ma dan segfault?
Għaliex ma dan segfault?
What would you tistenna li jiġri?
Jekk jien ma printf ("% s \ n", i); dak li inti tistenna li jiġu stampati?
[Student] X bonjour. >> Yeah.
Il-problema hija li meta inti tiddikjara string bħal dan,
i huwa pointer li għaddej biex imorru fuq il-munzell,
u dak i hija li tipponta lejn huwa dan sekwenza tiegħu jinsab fl-read-only-memorja.
Hekk biss bl-isem, read-only memory, għandek tikseb l-idea
li jekk inti tipprova li jibdlu x'hemm read-only-memorja,
inti qed tagħmel xi ħaġa inti ma għandha tkun qiegħda tagħmel bil-memorja u inti segfault.
Dan huwa attwalment differenza kbira bejn char * su char i [].
Allura char s [], issa din is-sekwenza se jitpoġġew fuq il-munzell,
u l-munzell hu ma taqra-biss, li jfisser li dan għandu jaħdem perfettament multa.
U ma.
Ftakar li meta nagħmel char * i = "bonjour dinja!", I innifsu huwa fuq il-munzell
imma punti i sa x'imkien ieħor, u li x'imkien ieħor jiġri li jinqraw-biss.
Iżda char s [] huwa biss xi ħaġa fuq il-munzell.
Allura dak eżempju ieħor ta 'segfault jiġri.
>> Rajna li ./buggy1 rriżulta fi segfault.
Fit-teorija, inti m'għandekx tħares lejn buggy1.c immedjatament.
Minflok, aħna ser tħares lejn dan permezz GDB.
Avviż li meta ikollok tort Segmentazzjoni (qalba mormi),
ikollok dan il-fajl fuq qalba hawn imsejħa.
Jekk aħna ls-l, aħna ser tara li qalba hija ġeneralment fajl pretty big.
Dan huwa n-numru ta 'bytes tal-fajl, hekk jidher qisu huwa 250-xi ħaġa kilobytes.
Ir-raġuni għal dan hija li dak li l-miżbla qalba attwalment hija
huwa meta ġġarrfu programm tiegħek, l-istat ta 'memorja tal-programm tiegħek
biss gets kkupjati u pasted fis dan il-fajl.
Hija gets iddampjati fis dan il-fajl.
Dan il-programm, filwaqt li kien għaddej, ġara li jkollhom użu tal-memorja ta 'madwar 250 kilobytes,
u hekk dan huwa dak ltqajna iddampjati fis dan il-fajl.
Issa inti tista 'tħares lejn dan il-fajl jekk nagħmlu GDB qalba buggy1.
Nistgħu biss tagħmel GDB buggy1, u li se biss jibdew GDB regolarment,
użu buggy1 bħala input fajl tagħha.
Imma jekk inti tagħmel GDB qalba buggy1, allura huwa speċifikament ser jibdew GDB
billi tħares lejn dan il-fajl qalba.
U inti tgħid GDB ifisser buggy1 jaf li dan il-fajl qalba ġej mill-programm buggy1.
Allura GDB buggy1 qalba se immedjatament jressaqna
li fejn il-programm ġara li jittermina.
Naraw hawnhekk Programm terminat bil-sinjal 11, tort Segmentazzjoni.
Aħna jiġri li tara linja ta 'assemblaġġ, li probabbilment mhuwiex utli ħafna.
Imma jekk inti tip bt jew backtrace, li għaddej biex tkun il-funzjoni tal-
li jagħtina l-lista ta 'frejms tagħna munzell attwali.
. Backtrace Allura Jidher qisu aħna biss frames munzell 2.
L-ewwel hija qafas tagħna munzell prinċipali,
u t-tieni huwa l-qafas munzell għal din il-funzjoni li aħna jiġri li jkun fil-
li qisu aħna biss għandhom il-kodiċi assemblaġġ għall.
Mela ejja mmorru lura fil-funzjoni ewlenija tagħna,
u li jagħmlu li nistgħu nagħmlu frame 1, u naħseb nistgħu wkoll nagħmlu l isfel,
imma jien kważi qatt do isfel - jew up. Yeah.
Up u 'l isfel. Up ġġib inti up qafas munzell wieħed, down ġġib inti isfel qafas munzell.
I-tendenza li qatt ma jużaw dan.
I biss speċifikament jgħidu qafas 1, li hu li tmur għall-qafas ittikjati 1.
Frame 1 se jressaqna fis frame munzell prinċipali,
u jgħid dritt hawn il-linja tal-kodiċi aħna jiġri li tkun fil.
Jekk ridna linji koppja aktar ta 'kodiċi, nistgħu ngħidu lista,
u li għaddej biex tagħtina l-linji ta 'kodiċi madwaru.
Il-linja aħna segfaulted fuq kien 6:
jekk (strcmp ("CS50 blat", ARGV [1]) == 0).
Jekk ma jkunx ovvju għadhom, inti tista 'tikseb hija dritta minn hawn biss billi jaħsbu għaliex segfaulted.
Iżda nistgħu teħodha pass ulterjuri u jgħidu, "Għaliex kieku ARGV [1] segfault?"
Print Ejja ARGV [1], u jidher qisu 0x0 huwa, li huwa l-pointer null.
Aħna strcmping CS50 blat u nulla, u b'tali mod li għaddej biex segfault.
U għaliex huwa ARGV [1] null?
[Student] Minħabba li aħna ma tathiex ebda argument kmand tal-linja.
Yeah. Aħna ma tagħtiha ebda argument kmand tal-linja.
Allura ./buggy1 huwa biss se jkollhom ARGV [0] tkun ./buggy1.
Huwa mhux ser ikollhom ARGV [1], b'tali mod li għaddej biex segfault.
Iżda jekk, minflok, I do biss CS50, li għaddej biex ngħid Ikollok D
għaliex dan huwa dak li huwa suppost tagħmel.
Ħarsa lejn buggy1.c, huwa suppost li jistampaw "Ikollok D" -
Jekk ARGV [1] mhuwiex "CS50 blat", "Ikollok D", inkella "Ikollok A!"
Allura jekk aħna tixtieq A, għandna bżonn dan li jqabblu bħala vera,
li jfisser li jikkompara għal 0.
Allura ARGV [1] jeħtieġ li jkunu "CS50 blat".
Jekk inti tixtieq li tagħmel dan fuq il-linja tal-kmand, inti għandek bżonn tuża \ jaħarbu l-ispazju.
Allura CS50 \ blat and You tikseb A!
Jekk inti ma tagħmel l-backslash, għaliex ma dan ma taħdimx?
[Student] Huwa żewġ argumenti differenti. >> Yeah.
ARGV [1] se tkun CS50, u ARGV [2] se tkun blat. Okay.
>> Issa ./buggy2 se segfault mill-ġdid.
Minflok jinfetaħ il-fajl qalba tagħha, aħna ser biss tiftaħ buggy2 direttament,
hekk GDB buggy2.
Issa jekk aħna biss run-programm tagħna, allura huwa għaddej biex ngħid Programm riċevut sinjal SIGSEGV,
li hija l-segfault sinjal, u dan huwa fejn ma ġara biex iseħħ.
Ħarsa lejn backtrace tagħna, naraw li aħna kienu fil-oh_no funzjoni,
li kienet tissejjaħ mill-dinky funzjoni, li kienet tissejjaħ mill-Binky funzjoni,
li kienet tissejjaħ mill prinċipali.
Nistgħu wkoll tara l-argumenti li dawn il-funzjonijiet.
L-argument li dinky u Binky kien 1.
Jekk aħna lista l-funzjoni oh_no, naraw li oh_no hija biss tagħmel char ** i = NULL;
* I = "Boom";
Għaliex kieku dik jonqsu?
[Student] Inti ma tistax dereference-pointer null? >> Yeah.
Dan huwa biss qal i huwa NULL, irrispettivament jekk dan jiġri li jkun hemm ** char,
li, jiddependi fuq kif inti tinterpreta dan, din tista 'tkun pointer għal pointer għal string
jew firxa ta 'spag.
Huwa i huwa NULL, għalhekk * i huwa dereferencing pointer null,
u għalhekk dan se crash.
Dan huwa wieħed mill-modi mgħaġġel inti tista 'possibilment segfault.
Huwa biss li tiddikjara pointer null u immedjatament segfaulting.
Dak hu li oh_no qed tagħmel.
Jekk immorru sa frame wieħed, allura aħna qed tmur biex tikseb fis-funzjoni li tissejjaħ oh_no.
I bżonn tagħmel dan isfel.
Jekk inti ma tidħol kmand u inti biss hit Ikteb mill-ġdid,
se biss jirrepetu l-kmand ta 'qabel li inti dam.
Aħna fil-qafas 1.
Elenkar dan il-qafas, naraw hawnhekk huwa funzjoni tagħna.
Tista 'hit lista mill-ġdid, jew inti tista' tagħmel lista 20 u se lista aktar.
Il dinky funzjoni jgħid jekk i huwa 1, imbagħad mur għall-funzjoni oh_no,
inkella mur l-funzjoni slinky.
U nafu i hija l-1 għaliex aħna jiġri biex tara up hawn
li dinky kienet tissejjaħ l-argument 1.
Jew tista 'biss tagħmel jistampaw i u se ngħid i hija l-1.
Aħna bħalissa dinky, u jekk immorru sa ieħor frame, nafu aħna ser jispiċċaw fil Binky.
Up. Issa aħna qed fl Binky.
Elenkar din il-funzjoni - il-lista mill-qabel nofs cut me off -
dan beda off bħala jekk i huwa 0, allura aħna qed tmur biex sejħa hija oh_no, inkella sejħa dinky.
Nafu i kien 1, u għalhekk imsejħa dinky.
U issa aħna qed lura fl prinċipali, u prinċipali huwa biss se tkun int i = Rand ()% 3;
Dan huwa biss se jagħtuk numru bl-addoċċ li huwa jew 0, 1, jew 2.
Huwa ser sejħa Binky ma 'dak in-numru, u ser jirritorna 0.
Ħarsa lejn din,
ftit mixi permezz tal-programm manwalment mingħajr ma tinkorri immedjatament,
inti jiffissaw punt tal-qasma fil-prinċipali, li jfisser li meta aħna tmexxi l-programm
programm tiegħek runs up sakemm hits punt waqfa.
Allura tħaddim tal-programm, se run u mbagħad se tolqot l-funzjoni prinċipali u tieqaf taħdem.
Issa aħna qed ġewwa ta 'prinċipali, u l-pass li jmiss jew se jressaqna għall-linja li jmiss tal-kodiċi.
Tista 'tagħmel pass jew li jmiss.
Laqtu jmiss, issa i ġiet stabbilita sa rand ()% 3, sabiex inkunu nistgħu jistampaw il-valur tal-i,
u se ngħid i hija l-1.
Issa dan ma jimpurtax jekk nużaw jmiss jew pass.
I raden mattered fil dak preċedenti, imma aħna rridu li jużaw jmiss.
Jekk nużaw pass, aħna pass lejn il-funzjoni, li tfisser ħarsa lejn il-ħaġa reali
li qed jiġri ġewwa ta 'Binky.
Jekk nużaw jmiss, allura dan ifisser jmorru fuq il-funzjoni
u biss jmorru mal-linja li jmiss tal-kodiċi fil-funzjoni ewlenija tagħna.
Dritt hawn fuq din il-linja, I kien fil fejn hija qalet rand ()% 3;
jekk I ma pass, dan imur fl-implimentazzjoni tal rand
u tħares lejn dak li qed jiġri hemmhekk, u I tista 'żżid permezz tal-funzjoni rand.
Imma jien ma jimpurtahom dwar il-funzjoni rand.
I biss trid tmur fil-linja li jmiss tal-kodiċi fl prinċipali, so I użu li jmiss.
Imma issa I do kura dwar il-funzjoni Binky, hekk nixtieq li pass lejn dan.
Issa jien fil Binky.
L-ewwel linja tal-kodiċi li jkun ser jgħidu jekk (i == 0), I tieħu pass,
naraw aħna jispiċċaw fil dinky.
Jekk l-affarijiet lista aħna, naraw li hija vverifikat huwa i = 0.
i mhux ugwali għal 0, u għalhekk marru għall-kondizzjoni oħra,
li se sejħa dinky (i).
Inti tista 'titħawwad.
Jekk inti biss ħarsa lejn dawn il-linji direttament, inti tista 'taħseb jekk (i == 0),
okay, imbagħad I ħa pass u issa jien fuq dinky (i),
inti tista 'taħseb li għandu jfisser i = 0 jew xi ħaġa.
No Dan ifisser biss li jaf li din tista 'twaħħal direttament lill-dinky linja (i).
Għaliex i ma tkunx 0, il-pass li jmiss mhux se jispiċċaw fil-ieħor.
Else mhix konformi li għaddej biex tieqaf.
Huwa biss se jmorru għall-linja li jmiss huwa jista 'effettivament tesegwixxi, li hija dinky (i).
Titjib fis dinky (i), naraw jekk (i == 1).
Aħna nafu i = 1, hekk meta aħna pass, nafu aħna qed tmur biex jispiċċaw fil oh_no
għaliex i = 1 jitlob l oh_no funzjoni, li inti tista 'pass lejn,
li se jistabbilixxu char ** i = l null u immedjatament "BOOM".
U mbagħad fil-fatt tħares lejn l-implimentazzjoni ta 'buggy2,
dan, i huwa biss jkollna numru bl-addoċċ - 0, 1, jew 2 - sejħa Binky,
li jekk i huwa 0 hija tappella oh_no, inkella jitlob dinky, li taqa up here.
Jekk i hija l-1, sejħa oh_no, inkella sejħa slinky, li ġejjin hawn,
jekk i huwa 2, sejħa oh_no.
Jien ma anki think hemm mod -
Hawn xi ħadd jara mod ta 'teħid dan il-programm li mhux se segfault?
Minħabba sakemm jien xi ħaġa nieqsa, jekk i huwa 0, inti ser immedjatament segfault,
inkella inti tmur għal funzjoni li jekk i hija l-1 inti segfault,
inkella inti tmur għal funzjoni fejn jekk i huwa 2 inti segfault.
Allura l-ebda kwistjoni dak li inti, inti segfault.
>> I raden mod wieħed ta 'iffissar ikun minflok tagħmel char ** i = NULL,
inti tista 'malloc spazju għal dak string.
Nistgħu nagħmlu malloc (sizeof) - sizeof liema?
[Student] (char) * 5? >> Does this jidhru dritt?
Jien wieħed jassumi din se taħdem jekk I attwalment dam, iżda mhux dak li jien infittxu.
Ħares lejn il-tip ta 's. Ejja żid * int, hekk int * x.
Jien kont nagħmel malloc (sizeof (int)).
Jew jekk jien ridt firxa ta '5, nixtieq do (sizeof (INT) * 5);
X'jiġri jekk I jkollhom ** int?
What I kieku malloc?
[Student] Daqs tal-pointer. >> Yeah. (Sizeof (INT *));
L-istess ħaġa stabbiliti hawn.
Irrid (sizeof (char *));
Dan ser jalloka l-ispazju għall-pointer li jindika "Boom".
I m'għandhomx bżonn li jiġu allokati spazju għal "Boom" innifisha
għaliex dan huwa bażikament ekwivalenti għal dak li għidt qabel
ta 'char * x = "Boom".
"BOOM" diġà jeżisti. Dan jiġri li jeżistu fir-reġjun jinqraw biss ta 'memorja.
Iżda diġà jeżisti, li jfisser din il-linja tal-kodiċi, jekk i huwa ** char,
allura * i huwa * char u int twaqqif din * char għall-punt għal "Boom".
Jekk jien ridt li kopja "BOOM" fis s, imbagħad I bżonn li jiġu allokati spazju għall-i.
I ser tagħmel * i = malloc (sizeof (char) * 5);
Għaliex 5?
Għaliex ma 4? Jidher qisu "BOOM" huwa 4 karattri. >> [Student] Il-karattru null.
Yeah. Kollha ta 'kordi tiegħek ser jeħtieġu l-karattru null.
Now I tista 'tagħmel xi ħaġa simili strcat - X'inhi l-funzjoni għall-ikkupjar string?
[Student] cpy? >> Strcpy.
strcpy bniedem.
Allura strcpy jew strncpy.
strncpy huwa daqsxejn aktar sikur minħabba li inti tista 'tispeċifika eżattament kemm karattri,
iżda hawnhekk ma jimpurtax għax nafu.
Allura strcpy u tfittex fil-argumenti.
L-ewwel argument huwa d-destinazzjoni tagħna.
It-tieni argument hija sors tagħna.
Aħna ser kopja fis * destinazzjoni tagħna s-pointer "Boom".
Għaliex jista inti tixtieq li tagħmel dan ma 'strcpy minflok biss dak li kellna qabel
ta * s = "Boom"?
Hemm raġuni inti tista 'tixtieq li tagħmel dan, iżda dak li hu din ir-raġuni?
[Student] Jekk trid tibdel xi ħaġa fil-"Boom". >> Yeah.
Now I tista 'tagħmel xi ħaġa simili i [0] = "X";
minħabba punti i għall-borġ u li l-ispazju fuq il-munzell li s hija li tipponta lejn
huwa pointer li aktar spazju fuq il-munzell, li huwa ħażna "Boom".
Allura din il-kopja ta '"BOOM" qed tiġi maħżuna fil-borġ.
Hemm teknikament żewġ kopji ta 'BOOM "fil-programm tagħna.
Hemm l-ewwel waħda li jinsab biss mogħti minn din kostanti "BOOM" spag,
u t-tieni kopja ta '"BOOM", strcpy ħoloq il-kopja ta' "Boom".
Iżda l-kopja ta '"BOOM" qed jiġi maħżun fuq il-munzell, u l-borġ int ħieles li jibdel.
Il-munzell hu ma taqra-biss, b'tali mod li jfisser li s [0]
se tavżak jibdlu l-valur ta '"Boom".
Huwa ser tavżak tibdel dawk il-karattri.
>> Mistoqsijiet?
Okay.
>> Nimxu fuq buggy3, ejja GDB buggy3.
Aħna biss run u naraw aħna jiksbu segfault.
Jekk aħna backtrace, hemm biss żewġ funzjonijiet.
Jekk immorru up fis funzjoni prinċipali tagħna, naraw li aħna segfaulted fil din il-linja.
Hekk biss tħares lejn din il-linja, għal (int linja = 0; fgets dan il-għalf ma NULL mhux ugwali;
Linja + +).
Qafas preċedenti tagħna kienet imsejħa _IO_fgets.
Int ser ikollok tara li ħafna ma 'funzjonijiet C built-in,
li meta ikollok l-segfault, se jkun hemm ismijiet funzjoni verament cryptic
bħal dan _IO_fgets.
Imma li għaddej biex jirrelataw ma 'din is-sejħa fgets.
X'imkien ġewwa hawnhekk, aħna segfaulting.
Jekk inħarsu lejn l-argumenti li fgets, nistgħu jistampaw buffer.
Ejja tipprintja bħala - Oh, no.
Stampa mhuwiex sejjer jaħdem eżattament kif I tixtieq li.
Ejja nħarsu lejn l-programm attwali.
Riserva huwa firxa karattru. Huwa firxa karattru ta '128 karattru.
Allura meta I say buffer istampar, li għaddej biex jistampaw dawk il-karattri 128,
li I raden huwa dak li huwa mistenni.
What I kienet tfittex għal huwa jistampaw l-indirizz ta 'buffer,
iżda li ma verament tell me ħafna.
Allura meta I jiġri biex ngħid up here buffer x, dan juri me 0xbffff090,
li, jekk tiftakar minn qabel jew f'xi punt, Oxbffff tendenza li tkun f'reġjun munzell ish.
Il-munzell għandu tendenza li tibda x'imkien ftit inqas 0xc000.
Biss billi jaraw dan l-indirizz, naf li buffer qed jiġri fuq il-munzell.
Bidu mill-ġdid il-programm tiegħi, run, up, protezzjoni kontra rajna kien din is-sekwenza ta 'karattri
li huma pjuttost ħafna sens.
Imbagħad istampar fajl, dak ma fajl look like?
[Student] Null. >> Yeah.
Fajl huwa ta '* FAJL tip, u għalhekk huwa pointer,
u l-valur ta 'dik pointer huwa null.
Allura fgets se tipprova li jaqra minn dak pointer b'mod indirett,
iżda sabiex ikun hemm aċċess dak pointer, għandu dereference dan.
Jew, sabiex ikun hemm aċċess dak li għandu jkun li tipponta lejn, huwa dereferences dan.
Allura huwa dereferencing pointer null u huwa segfaults.
I setgħet jerġa hemmhekk.
Jekk aħna break fil-punt ewlieni tagħna u run,
l-ewwel linja tal-kodiċi hija char * file = "nonexistent.txt";
Dan għandu jagħti ħjiel kbira pretty għaliex dan il-programm jonqos.
Ittajpjar jmiss jwassalni għall-linja li jmiss, fejn I miftuħa dan il-fajl,
u mbagħad I immedjatament tikseb fis-linja tagħna, fejn darba I hit li jmiss, li għaddej biex segfault.
Hawn xi ħadd tixtieq li tarmi l-raġuni għaliex aħna jista 'jkun segfaulting?
[Student] File ma teżistix. >> Yeah.
Dan suppost tkun ħjiel
li kull meta inti qed jiftħu fajl għandek bżonn biex jivverifikaw li l-fajl fil-fatt teżisti.
Allura hawnhekk, "nonexistent.txt";
Meta aħna filename fopen għall-qari, aħna mbagħad bżonn li jgħidu
jekk (== fajl NULL) u jgħidu printf ("File ma jeżistix!"
jew - aħjar għadhom - isem tal-file); ritorn 1;
Allura issa aħna tikkontrolla biex tara jekk huwa NULL
qabel ma effettivament kontinwu u tipprova taqra minn dan il-fajl.
Nistgħu remake hija biss biex tara li li x-xogħlijiet.
I maħsuba biex tinkludi linja ġdida.
Allura issa nonexistent.txt ma teżistix.
Għandek dejjem jiċċekkja għal dan it-tip ta 'ħaġa.
Għandek dejjem tikkontrolla biex tara jekk fopen prospetti NULL.
Għandek dejjem jivverifika sabiex ikun żgur li malloc ma ritorn NULL,
jew inkella inti segfault.
>> Issa buggy4.c.
Running. Jien guessing dan huwa stennija għal input jew looping possibilment infinita.
Iva, huwa looping infinita.
Allura buggy4. Jidher qisu aħna qed looping infinita.
Nistgħu break fil prinċipali, run program tagħna.
Fil GDB, sakemm it-taqsira tuża mhijiex ambigwa
jew abbrevjazzjonijiet speċjali li huma jipprovdu għalik,
allura inti tista 'tuża n-użu li jmiss minflok li tip l jmiss it-triq kollha.
U issa li stajt hit n darba, nista 'biss hit Ikteb biex jibqgħu għaddejjin jmiss
minflok li hit n Daħħal, n Daħħal, n Ikteb.
Jidher qisu jien f'xi tip ta 'għal linja li l-iffissar array [i] għal 0.
Jidher qisu I am qatt breaking out ta 'dan għall loop.
Jekk I jistampaw i, hekk i huwa 2, imbagħad I ser imorru jmiss.
I ser jistampaw i, i huwa 3, imbagħad I ser imorru jmiss.
I ser jistampaw i ui huwa 3. Sussegwentement, jistampa i, i hija 4.
Attwalment, jistampa sizeof (array), sabiex id-daqs tal-array huwa ta '20.
Iżda jidher qisu hemm xi kmand GDB speċjali biex imur jiġri xi ħaġa sakemm.
Huwa simili tistabbilixxi kundizzjoni fuq il-valur tal-varjabbli. Imma I ma tiftakarx dak li hu.
Allura jekk aħna jibqgħu għaddejjin -
X'kont qed tgħid? What did inti tressaq up?
[Student] Ma display i żid - >> Yeah. Allura wiri i tista 'tgħin.
Jekk aħna biss display i, se tpoġġi up hawn dak il-valur tal-i hija
so I ma jkollhom biex jistampaw it out kull darba.
Jekk aħna biss iżommu għaddejjin li jmiss, naraw 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5.
Xi ħaġa li qed jiġri ħażin terriblement, ui qed reset għal 0.
Ħarsa lejn buggy4.c, naraw dak kollu li jiġri huwa array int [5];
għal (i = 0; i <= sizeof (array); i + +)
array [i] = 0;
What do naraw li l-ħażin hawn?
Bħala ħjiel, meta I kienet tagħmel l GDB buggy4 - ejja break prinċipali, run -
I ma print sizeof (array) biss biex tara dak il-kundizzjoni huwa fejn I għandhom finalment break out.
Fejn am I? Did I run?
I ma niddikjara s'issa.
Allura print sizeof (array) u li l-20,
li hu mistenni mill-firxa tiegħi huwa ta 'daqs 5 u huwa ta' 5 interi,
hekk il-ħaġa sħiħa għandha tkun 5 * sizeof (int) bytes, fejn sizeof (int) għandha tendenza li jkun ta '4.
Allura sizeof (array) huwa ta '20.
X'għandu jkun dan?
[Student] Maqsuma mill sizeof (int). >> Yeah, / sizeof (int).
Jidher qisu hemm għadu problema hawn. Naħseb li dan għandu jkun biss <
peress li huwa pjuttost ħafna dejjem <u qatt <=.
Issa ejja jaħsbu dwar għaliex dan kien effettivament miksura.
Hawn xi ħadd li guesses għaliex kien i reset għal 0 permezz ta 'kull iterazzjoni tal-linja?
L-unika ħaġa ġewwa ta 'hawnhekk li qed jiġri huwa li l array [i] qed jiġi ssettjat għal 0.
Allura b'xi, din il-linja tal-kodiċi qed jikkawża int tagħna i li jkun issettjat għal 0.
[Student] Jista 'jkun għaliex dan huwa prevalenti l-memorja ta' din il-parti ta 'i
meta jidhirlu li huwa l-element li jmiss ta 'firxa? >> [Bowden] Iva.
Meta aħna qed tmur lil hinn mill-aħħar tas firxa tagħna,
b'xi mod li l-ispazju li aħna qed superjuri huwa prevalenti l-valur tal-i.
U għalhekk jekk inħarsu fis buggy4, break prinċipali, run,
ejja jistampa l-indirizz ta 'i.
Jidher qisu huwa bffff124.
Issa ejja jistampa l-indirizz tal-firxa [0]. 110.
What about [1]? 114.
[2], 118.
11c, 120. array [5] hija bfff124.
Allura array [5] għandha l-istess indirizz kif i, li jfisser li firxa [5] huwa i.
Jekk ikollhom l-istess indirizz, huma l-istess ħaġa.
Allura meta aħna waqqafna firxa [5] għal 0, aħna qegħdin jistabbilixxu i għal 0.
U jekk taħseb dwar dan f'termini ta 'l-munzell,
i int tkun dikjarata l-ewwel, li jfisser i gets xi spazju fuq il-munzell.
Imbagħad array [5] huwa allokat, hekk allura 20 bytes huma allokati fuq il-munzell.
Hekk i gets allokati l-ewwel, imbagħad dawn il-bytes 20 nikseb allokati.
Hekk i jiġri dritt quddiem il-firxa,
u minħabba l-mod, bħal I qal aħħar ġimgħa, fejn teknikament il-munzell tikber isfel,
meta inti indiċi fi array, aħna garantit li l-pożizzjoni 0 fil-firxa
dejjem jiġri qabel l-ewwel pożizzjoni fil-firxa.
Dan huwa tip ta 'kif I ġibdet dan ġimgħa li għaddiet.
Avviż li fil-qiegħ għandna indirizz 0 u fil-quċċata għandna Max indirizz.
Il-munzell hu dejjem jikber isfel.
Ejja ngħidu aħna jallokaw i.
Aħna jallokaw numru sħiħ i, li jfisser ejja biss jgħidu up here numru sħiħ i gets allokat.
Imbagħad aħna jallokaw firxa tagħna ta '5 interi, li jfisser li taħtha dan,
peress li l-munzell qed jikber isfel, dawk interi 5 nikseb allokati.
Iżda minħabba kif arrays xogħol, aħna qed garantit li l-ewwel pożizzjoni fil-firxa
dejjem ikollu l-indirizz inqas mill-tieni ħaġa fil-firxa.
Allura 0 pożizzjoni firxa dejjem għandu jiġri 1 fil-memorja,
billi l-pożizzjoni array 1 għandu jiġri wara dik
u l-pożizzjoni array 2 għandu jiġri wara dan,
li jfisser li 0 pożizzjoni firxa jiġri x'imkien stabbiliti hawn,
pożizzjoni array 1 jiġri hawn fuq li
minħabba li jiċċaqalqu up ifisser indirizzi ogħla peress li l-indirizz massimu huwa up here.
Allura array [0] stabbiliti hawn, array [1] sa hawn, array [2] up hawn, array [3] up here.
Avviż kif qabel we allokat numru sħiħ i-triq kollha sa hawn,
kif nimxu aktar u aktar fis firxa tagħna, aħna qed jersqu qrib u eqreb lejn numru sħiħ tagħna i.
Huwa biss hekk jiġri li array [5], li huwa wieħed mill-pożizzjoni lilhinn firxa tagħna,
huwa eżattament fejn integer i ġara li għandhom jiġu allokati.
Allura dak l-punt fejn aħna jiġri li jkun laqtu l-ispazju fuq il-munzell
li kien allokat għall-eqreb numru sħiħ i, u aħna qed jistabbilixxu li sa 0.
>> Li kif din taħdem. Mistoqsijiet? Yeah.
[Student] Never mind. Okay.
[Student] Kif inti tevita dawn it-tip ta 'żbalji?
Dawn it-tip ta 'żbalji? Tużax C bħala lingwa ta 'programmar tiegħek.
Uża lingwa li għandha limiti array verifika.
Sakemm int attent, inti biss jeħtieġ li jiġi evitat li jmorru passat l-limiti tal-firxa tiegħek.
[Student] Allura hawnhekk meta aħna marru passat il-limiti tal-firxa tiegħek -
[Bowden] Li meta l-affarijiet jibdew tmur ħażina. >> [Student] Oh, okay.
Sakemm inti toqgħod fi ħdan il-memorja allokata għall-firxa tiegħek, int multa.
Imma C ma ebda verifika ta 'żball. Jekk I do firxa [1000], se gladly biss timmodifika jiġri x'jiġri -
Hija tmur għall-bidu ta 'l-array, allura tmur 1000 pożizzjonijiet wara u tistabbilixxi li sa 0.
Ma tagħmel ebda verifika li oh, dan ma attwalment ikollhom 1000 l-affarijiet fiha.
1000 hija mod lil hinn minn dak I għandu jiġi jinbidlu,
billi Java jew xi ħaġa li inti ser tingħata firxa minn indiċi limiti
jew indiċi minn limiti eċċezzjoni.
C'est pourquoi ħafna ta 'lingwi ta' livell ogħla għandhom dawn l-affarijiet
fejn jekk inti tmur lil hinn mill-limiti tal-firxa, inti tonqos
sabiex inti ma tistax tbiddel l-affarijiet minn taħt inti
u mbagħad l-affarijiet imorru ħafna agħar minn sempliċiment jkollna eċċezzjoni
tgħid li inti marru lil hinn mill-aħħar tas-array.
[Student] U hekk għandu għadna kemm biddlu l-<= għal ftit <? >> [Bowden] Yeah.
Għandu jkun <sizeof (array) / sizeof (int);
peress sizeof (array) hija ta '20, iżda aħna biss trid 5. >> [Student] Dritt.
Mistoqsijiet Aktar? Okay.
>> [Student] ikolli mistoqsija. >> Yeah.
[Istudent] X'inhu l-varjabbli firxa attwali?
[Bowden] Bħal dak li huwa array?
Array nnifisha hija simbolu.
Huwa biss l-indirizz tal-bidu tal-bytes 20 li aħna qed referenzar.
Inti tista 'taħseb li bħala pointer, iżda huwa pointer kostanti.
Hekk kif l-affarijiet nikseb miġbura, il-firxa varjabbli m'għadhiex teżisti.
[Student] Allura kif issib id-daqs tal array?
Daqs tal array jirreferi għad-daqs ta 'dik blokk li dak is-simbolu jirreferi għal.
Meta I do xi ħaġa bħal printf ("% p \ n", array);
ejja run.
What did I biss tagħmel ħażin?
"Firxa" Array ddikjarati hawnhekk.
Oh, up here.
Clang hija għaqlija, u dan jiġri li l-avviż li jien ddikjarat li l-firxa kif 5 elementi
imma jien indiċjar fil-pożizzjoni 1000.
Hija tista 'tagħmel dan minħabba li dawn huma biss kostanti.
Hija tista 'ssir biss s'issa jinnota li jien jmorru lil hinn mill-limiti tal-firxa.
Iżda avviż qabel meta kellna i mhux korrett,
ma tistax tistabbilixxi kemm il-valuri i tista 'tieħu fuq,
għalhekk ma tistax tistabbilixxi li i kienet tmur lil hinn mill-aħħar tas-array.
Li jinsab biss clang qed għaqlija.
>> Imma issa jagħmlu buggy4. Allura dak li inkella am I tagħmel ħażin?
Impliċitament li tiddikjara funzjoni librerija "printf".
Jien ser jridu # Jinkludu .
Okay. Issa running buggy4.
Stampar tal-valur tal-firxa bħal I ma hawn, l-istampar bħala indikatur
prints xi ħaġa li tidher bħal dan - bfb8805c - li hija xi indirizz
dan huwa fir-reġjun munzell ish.
Array innifsu huwa bħal pointer, iżda mhuwiex indikatur attwali,
peress pointer regolari nistgħu nbiddlu.
Array huwa biss ftit kostanti. Il-blokki 20 ta 'memorja tibda fil 0xbfb8805c indirizz.
Allura bfb8805c permezz ta 'dan l-indirizz +20--jew I raden -20 -
hija kollha tal-memorja allokati għal dan il-firxa.
Array, il-varjabbli nnifisha ma tkunx maħżuna kullimkien.
Meta inti qed jikkompila, il kumpilatur - mewġa idejn fuq dan -
iżda l-kumpilatur se biss użu fejn huwa jaf array li jkun.
Huwa jaf fejn dik array jibda,
u għalhekk jista 'biss dejjem tagħmel affarijiet f'termini ta' kumpensi minn dik bidu.
Dan ma jkunx jeħtieġ varjabbli ruħha li jirrappreżentaw firxa.
Imma meta I tagħmel xi ħaġa simili int * p = array; issa p huwa werrej li jindika li array,
u issa p attwalment ma jeżistu fuq il-munzell.
Jien ħielsa li jibdlu p. I tista 'tagħmel p = malloc.
Għalhekk oriġinarjament indikat firxa; issa hija tfakkar li xi spazju fuq il-borġ.
I ma tistax tagħmel firxa = malloc.
Jekk clang hija għaqlija, se Yell fil lili dritt off BAT.
Fil-fatt, jien pretty żgur GCC ser jagħmlu dan ukoll.
Allura tip array "int [5]" mhuwiex assenjabbli.
Inti ma tistax tassenja xi ħaġa ma 'tip array
minħabba array huwa biss kostanti.
Huwa simbolu li r-referenzi dawk bytes 20. I ma tistax tbiddel din.
>> [Student] U fejn hija l-daqs tal-array maħżuna?
[Bowden] Mhuwiex maħżuna kullimkien. Huwa meta huwa kumpilazzjoni.
Għalhekk, fejn huwa l-daqs tal-array maħżuna?
Tista 'tuża biss sizeof (array) ġewwa tal-funzjoni li l-firxa hija ddikjarata innifsu.
Mela jekk jien tagħmel xi funzjoni, foo, u jien (int array [])
printf ("% d \ n", sizeof (array));
u mbagħad stabbiliti hawn I call foo (array);
ġewwa ta 'din il-funzjoni - ejja run.
Dan huwa clang qed għaqlija mill-ġdid.
Huwa me javżak li sizeof fuq parametru funzjoni firxa
se terġa 'lura daqs ta' '* int ".
Dan ikun żball jekk mhuwiex dak li ridt li jiġri.
Ejja attwalment itfi Werror.
Twissija. Twissijiet huma multa.
Hija xorta se jiġbor sakemm ikollu twissija.
. / A.out se print 4.
It-twissija li kienet iġġenerata hija indikazzjoni ċara ta 'dak li marret ħażin.
Dan array int huwa biss se jistampaw sizeof (int *).
Anke jekk nressaq array [5] fil hawn, huwa għadu biss se jistampaw sizeof (int *).
Allura hekk kif inti għaddih fil-funzjoni, id-distinzjoni bejn matriċi u indikaturi
huwa kważi ma jeżistix.
Dan jiġri li jkun array li kien iddikjarat fuq il-munzell,
iżda hekk kif aħna jgħaddu dak il-valur, din 0xbf blah, blah, blah fis din il-funzjoni,
allura dan il-werrej li tinnota din array fuq il-munzell.
Allura dan ifisser li sizeof tapplika biss fil-funzjoni li l-firxa kienet iddikjarat,
li jfisser li meta inti qed jikkompila din il-funzjoni,
meta clang tmur permezz din il-funzjoni, huwa jara array huwa firxa int ta 'daqs 5.
Mela allura jara sizeof (array). Ukoll, li 20.
Li l-fatt kif sizeof bażikament jaħdem għal kważi l-każijiet kollha.
Sizeof mhix funzjoni, huwa l-operatur.
Inti ma jpoġġux il-funzjoni sizeof.
Sizeof (int), il-kumpilatur se biss tittraduċi dan sa 4.
Ghandek it? Okay.
>> [Student] Allura x'inhi d-differenza bejn sizeof (array) fl prinċipali u foo?
Dan huwa għaliex aħna qed tgħid sizeof (array), li huwa ta '* int tip,
billi l-firxa isfel hawnhekk mhix ta '* int tip, huwa ta' firxa int.
>> [Student] Mela jekk kellek il-parametru fil array [] minflok firxa * int,
ikun ifisser li inti tista 'xorta tbiddel firxa għaliex issa dan huwa pointer?
[Bowden] Bħal din? >> [Student] Yeah. Tista tbiddel firxa fi ħdan il-funzjoni issa?
[Bowden] Inti tista 'tbiddel firxa fiż-żewġ każijiet.
F'dawn iż-żewġ każijiet inti liberu li tgħid array [4] = 0.
[Student] Iżda tista 'tagħmel il-punt array biex xi ħaġa oħra?
[Bowden] Oh. Yeah. Fi kwalunkwe każ - >> [student] Yeah.
[Bowden] Id-distinzjoni bejn firxa [] u l-firxa * int, m'hemm xejn.
Tista 'wkoll tikseb xi firxa multidimensjonali fil hawn
għal xi sintassi konvenjenti, iżda huwa għadu biss pointer.
Dan ifisser li jiena liberu li jagħmel array = malloc (sizeof (int)), u issa il-punt x'imkien ieħor.
Iżda biss bħal kif dan jaħdem għal dejjem u dejjem,
jinbidlu dan array billi jagħmilha punt li xi ħaġa oħra
ma jbiddilx din il-firxa stabbiliti hawn, għaliex dan huwa kopja ta 'l-argument,
mhuwiex pointer għal dan l-argument.
U fil-fatt, biss bħala indikazzjoni aktar li huwa eżattament l-istess -
aħna diġà raw dak prints firxa ta 'stampar -
dak jekk aħna jistampaw l-indirizz ta 'l-array jew l-indirizz ta' l-indirizz tal-firxa
ma 'jew ta' dawk?
Ejja jinjora dan wieħed.
Okay. Dan huwa multa. Huwa issa qed taħdem. / A.out.
Firxa ta 'stampar, allura istampar l-indirizz ta' l-array, huma l-istess ħaġa.
Array sempliċement ma jeżistix.
Dan jaf meta int istampar firxa, int istampar s-simbolu li tirreferi għal dawk bytes 20.
Stampar l-indirizz ta 'l-array, ukoll, array ma teżistix.
Huwa ma jkollu l-indirizz, u għalhekk hija biss prints l-indirizz ta 'dawk bytes 20.
Hekk kif inti tiġbor isfel, bħal fil buggy4 ikkumpilata tiegħek. / A.out,
firxa hija kważi ma jeżistix.
Pointers jeżistu. Arrays ma.
Il-blokki ta 'memorja li jirrappreżentaw il-firxa għadhom jeżistu,
iżda l-firxa varjabbli u fatturi varjabbli ta 'dak it-tip ma jeżistux.
Dawk huma bħall-differenzi ewlenin bejn matriċi u indikaturi
huma hekk kif inti tagħmel sejħiet funzjoni, m'hemm l-ebda differenza.
Iżda ġewwa tal-funzjoni li l-firxa nnifisha hija ddikjarat, sizeof xogħlijiet differenti
peress li int istampar id-daqs tal-blokki minflok id-daqs tat-tip,
u inti ma tistax tbiddel din għaliex dan huwa simbolu.
Stampar il-ħaġa u l-indirizz tal-ħaġa prints l-istess ħaġa.
U li pretty ħafna minnha.
[Student] Tista tgħid li waħda aktar ħin?
I jista 'jkollhom qbiżt xi ħaġa.
Firxa Stampar u indirizz tal array prints l-istess ħaġa,
billi jekk inti print pointer kontra l-indirizz tal-pointer,
l-unika ħaġa prints l-indirizz ta 'dak li qed tipponta lejn,
l-oħra prints l-indirizz ta 'l-pointer fuq il-munzell.
Tista 'bidla pointer, inti ma tistax tbiddel simbolu firxa.
U pointer sizeof se jistampaw il-daqs ta 'dak it-tip pointer.
Allura int * p sizeof (p) se jistampaw 4,
imma int array [5] print sizeof (array) se print 20.
[Student] Mela int array [5] se print 20? >> Iva.
C'est pourquoi ġewwa ta buggy4 meta użati biex jiġi sizeof (array)
dan kien isir i <20, li mhuwiex dak li ridna.
Irridu i <5. >> [Student] Okay.
[Bowden] U allura malli tibda tgħaddi fil-funzjonijiet,
jekk aħna ma int * p = array;
ġewwa ta 'din il-funzjoni, nistgħu bażikament jużaw p u firxa eżattament fl-istess mod,
ħlief għall-problema sizeof u l-problema li qed jinbidlu.
Imma p [0] = 1; huwa l-istess kif qal array [0] = 1;
U hekk kif aħna ngħidu foo (array), jew foo (p);
ġewwa tal-funzjoni foo, dan huwa l-istess sejħa darbtejn.
M'hemm l-ebda differenza bejn dawn żewġ sejħiet.
>> Tajba fuq kulħadd? Okay.
We have 10 minuti.
>> Aħna ser nipprova nikseb permezz ta 'dan il-programm Typer Hacker,
din il-websajt, li ħareġ aħħar sena jew xi ħaġa.
Huwa biss suppost li jkun simili inti tip saltwarjament u li tistampa -
Tkun xi fajl dan jiġri jkun għabbew huwa dak li jidher qisu int ittajpjar.
Jidher qisu xi tip ta 'kodiċi sistema operattiva.
Dan huwa dak li rridu li jimplimentaw.
Għandu jkollok eżekutibbli binarja jismu hacker_typer
li jieħu fil argument, il-fajl li "tip Hacker."
Running l-eżekutibbli għandu ċar l-iskrin
u mbagħad jistampa karattru wieħed mill-inkartament għadda fil kull darba li l-utent jagħfas buttuna.
Allura x'ikun ewlenin inti istampa, għandu armih u minflok tistampa karattru mill-fajl
li huwa l-argument.
I ser pretty ħafna jgħidlek liema l-affarijiet li aħna qed tmur għall-ħtieġa li jkunu jafu huma.
Iżda aħna tixtieq li jiċċekkjaw il-librerija termios.
I qatt ma użaw din il-librerija fil-ħajja kollu tiegħi, għalhekk għandu skopijiet ħafna minimu.
Iżda dan se jkun il-librerija nistgħu nużaw biex tarmi l-karattru inti hit
meta tkun qed tittajpja fis istandard pulzieri
Allura hacker_typer.c, u aħna qed tmur jridu # Jinkludu .
Ħarsa lejn il-paġna bniedem għall termios - I'm guessing terminali huwa OS jew xi ħaġa -
I do not know kif biex taqraha.
Ħarsa lejn din, jgħid li tinkludi dawn il-fajls 2, hekk aħna ser tagħmel dan.
>> L-ewwel ħaġa l-ewwel, irridu li jieħdu fil argument, li huwa l-fajl għandna miftuħa.
Mela xi do I trid tagħmel? Kif nista tikkontrolla biex tara għandi argument?
[Student] Jekk argc ugwali dan. >> [Bowden] Yeah.
Mela jekk (argc = 2!) Printf ("użu:% s [fajl li tiftaħ]").
Allura issa jekk I run dan mingħajr ma tipprovdi argument tieni - oh, I bżonn l-linja l-ġdida -
int ser tara li jgħid l-użu:. / hacker_typer,
u mbagħad it-tieni argument għandu jkun il-fajl Irrid li tiftaħ.
Issa x'għandi nagħmel?
Irrid li jinqara mill dan il-fajl. Kif nista tinqara minn fajl?
[Student] Inti tiftaħ l-ewwel. >> Yeah.
. Fopen Allura Xi jfisser fopen look like?
[Student] Filename. >> [Bowden] Filename se tkun ARGV [1].
[Student] U allura dak li inti trid tagħmel ma 'dan, sabiex il - >> [Bowden] Yeah.
Mela jekk inti ma tiftakar, inti biss tista 'tagħmel fopen bniedem,
fejn huwa għaddej biex tkun const char * triq fejn passaġġ huwa file,
const char * modalità.
Jekk jiġri li ma tiftakar huwa mod dak, allura inti tista 'tfittex għall-modalità.
Ġewwa ta 'paġni bniedem, il-karattru mmejla huwa dak li inti tista' tuża biex tfittex għal affarijiet.
So I tip / modalità ta 'tiftix għal mod.
u N huma dak li inti tista 'tuża biex ċiklu permezz tal-logħbiet tat-tiftix.
Hawn jgħid il-punti modalità argument li string
bidu ma 'waħda mill-sekwenzi li ġejjin.
Allura r, Open test fajl għall-qari. Dan huwa dak li rridu nagħmlu.
Għal qari, u nixtieq li jaħżen din.
Il-ħaġa hija se tkun * FAJL. Issa dak li nixtieq do?
Agħti me-tieni.
Okay. Issa dak li nixtieq do?
[Student] Iċċekkja jekk huwa NULL. >> [Bowden] Yeah.
Kwalunkwe ħin li inti tiftaħ fajl, kun żgur li int b'suċċess tista 'tiftħu.
>> Issa nixtieq li tagħmel dan Jittieħed termios fejn nixtieq li l-ewwel taqra settings kurrenti tiegħi
u ħlief dawk fis xi ħaġa, imbagħad I trid tibdel settings tiegħi
li tarmi kwalunkwe karattru li jien tip,
u mbagħad nixtieq li jaġġornaw dawk settings.
U mbagħad fl-aħħar tal-programm, nixtieq li bidla lura għas-settings oriġinali tiegħi.
Allura l-Struct se tkun ta termios tip, u jien ser jridu tnejn ta 'dawk.
L-ewwel waħda se tkun current_settings tiegħi,
u allura dawn qed tmur biex tkun hacker_settings tiegħi.
L-ewwel, jien ser tixtieq li tiffranka settings kurrenti tiegħi,
allura jien ser tixtieq li taġġorna hacker_settings,
u mbagħad il-mod fl-aħħar tal-programm tiegħi, nixtieq li jerġa 'lura għas-settings kurrenti.
Allura iffrankar settings attwali, il-mod li jaħdem, termios bniedem aħna.
Naraw li għandna dan tcsetattr int, int tcgetattr.
I jgħaddu fi Struct termios minn pointer tagħha.
Il-mod kif dan se tħares hu - I've diġà minsija dak li l-funzjoni kienet imsejħa.
Kopja u paste.
Allura tcgetattr, allura nixtieq li jgħaddu fil-Struct li jien iffrankar l-informazzjoni,
li se tkun current_settings,
u l-ewwel argument huwa l-deskrittur fajl għall-ħaġa nixtieq li jiffrankaw l-attributi ta '.
X'inhu l-deskrittur fajl huwa huwa, bħal kull darba li inti tiftaħ fajl, jiġrilha deskrittur fajl.
Meta I fopen ARGV [1], jiġrilha deskrittur fajl li inti referenzjar
kull meta inti tixtieq li taqra jew tikteb lilha.
Li mhux il-deskrittur fajl I jridu jużaw hawnhekk.
Hemm tliet deskritturi fajl għandek kontumaċja,
li huma standard fl-out standard, u l-iżball standard.
Permezz ta 'default, naħseb li huwa standard fil huwa 0, l-istandard huwa 1, u l-iżball standard huwa 2.
Mela xi do nixtieq li jbiddel l-issettjar ta '?
Irrid li jbiddel l-issettjar ta 'kulmeta I hit karattru,
Irrid li tarmi dan il-karattru bogħod minflok ta 'stampar lill-iskrin.
Liema fluss - standard, barra standard, jew żball standard -
jirrispondi għall-affarijiet meta I tip fuq il-keyboard? >> [Student] Standard pulzieri >> Yeah.
So I tista 'jew tagħmel 0 jew I tista' tagħmel stdin.
Jien jkollna l-current_settings ta 'standard pulzieri
>> Issa nixtieq li jaġġornaw dawk settings,
sabiex l-ewwel jien ser kopja fis hacker_settings dak current_settings tiegħi huma.
U kif structs xogħol huwa se biss kopja.
Dan kopji kollha ta 'l-oqsma, kif tista' tistenna.
>> Issa nixtieq li taġġorna wħud mill-oqsma.
Ħarsa lejn termios, inti għandek taqra permezz ta 'lott ta' dan
biss biex tara dak li inti tixtieq tfittex,
iżda l-bnadar int ser tixtieq tfittex huma eku,
hekk ECHO karattri input Echo.
L-ewwel nixtieq li jistabbilixxu - I've diġà minsija dak l-oqsma huma.
Dan huwa dak li l-Struct Dehra.
So modi input naħseb irridu bidla.
Aħna ser tħares lejn is-soluzzjoni biex tiżgura li huwa dak li rridu bidla.
Aħna tixtieq li tibdel lflag sabiex jipprevjenu bżonn li tfittex permezz dawn kollha.
Aħna tixtieq li tibdel modi lokali.
Int tkun trid taqra permezz ta 'dan ħaġa sħiħa biex jifhmu jappartjeni kollox fejn
li aħna trid tibdel.
Imma hija ġewwa ta 'modi lokali fejn aħna qed tmur jridu bidla li.
Allura hacker_settings.cc_lmode huwa dak li sejjaħ.
c_lflag.
Dan huwa fejn aħna jsibu rwieħhom operaturi bitwise.
Aħna tip ta 'barra ta' żmien, iżda aħna ser jgħaddu minnha reali malajr.
Dan huwa fejn aħna jsibu rwieħhom operaturi bitwise,
fejn I think I qal wieħed żmien twil ilu li kull meta tibda jittrattaw bnadar,
int se tkun qed tuża operatur bitwise ħafna.
Kull daqsxejn fil-bandiera jikkorrispondi għal xi tip ta 'mġieba.
Allura hawn, din il-bandiera għandha mazz ta 'affarijiet differenti, fejn kull wieħed minnhom tfisser xi ħaġa differenti.
Imma dak li nixtieq tagħmel huwa biss itfi l-ftit li jikkorrispondi għal ECHO.
Allura biex tibdel din off nagħmel & = ¬ ECHO.
Fil-fatt, naħseb huwa simili techo jew xi ħaġa. Jien biss ser erġa 'ċċekkja.
I jistgħu termios dan. Huwa biss ECHO.
ECHO se tkun daqsxejn waħda.
¬ ECHO se tfisser l bits huma stabbiliti għal 1, li tfisser kull bandiera huma stabbiliti biex vera
ħlief għall-ftit ECHO.
Billi jispiċċa bnadar lokali tiegħi ma 'dan, dan ifisser jtajru liema bandiera jtajru li bħalissa huma stabbiliti biex vera
xorta se jiġu ffissati għal veru.
Jekk bandiera ECHO tiegħi huwa stabbilit li veru, allura dan hu neċessarjament stabbilit li foloz fuq il-bandiera ECHO.
Allura din il-linja tal-kodiċi ftit titfi l-bandiera ECHO.
Il-linji oħra ta 'kodiċi, I ser biss kopja minnhom fl-interess ta' żmien u mbagħad jispjegaw lilhom.
Fl-soluzzjoni, huwa qal 0.
Huwa probabbilment aħjar li espliċitament jgħidu stdin.
>> Avviż li jien wkoll tagħmel ECHO | ICANON hawn.
ICANON jirreferi għal xi ħaġa separata, li jfisser modalità canonical.
Liema mezzi modalità canonical huwa normalment meta int ittajpjar l-linja tal-kmand,
standard ma tipproċessax xejn sakemm inti hit newline.
Allura meta inti tagħmel GetString, inti tip mazz ta 'affarijiet, allura inti hit newline.
Li meta huwa mibgħut għall-istandard pulzieri
Dik hija l-inadempjenza.
Meta I itfi modalità canonical, issa kull karattru uniku inti istampa
huwa dak gets pproċessata, li normalment hija tip ta 'bad, għaliex dan huwa bil-mod li jipproċessaw dawn l-affarijiet,
u huwa għalhekk li huwa tajjeb biex jitnaqqas dan fil-linji kollha.
Imma nixtieq kull karattru li jridu jiġu pproċessati
peress li jien ma tridx li tistenna lili biex hit newline
qabel ma jipproċessa l-karattri stajt ġiet ittajpjar.
Dan titfi modalità canonical.
Dan Jittieħed biss ifisser meta attwalment jipproċessa karattri.
Dan ifisser proċess immedjatament; malli I am ittajpjar minnhom, jipproċessawha.
U dan huwa l-funzjoni li qed taġġorna settings tiegħi għal standard,
u l-mezzi TCSA tagħmel dan id-dritt issa.
L-għażliet l-oħra huma stenna sakemm dak kollu li bħalissa huwa fuq in-nixxiegħa tkun proċessata.
Dan ma verament kwistjoni.
Just dritt issa bidla settings tiegħi li jkun kollu li hu bħalissa fis hacker_typer_settings.
I raden I sejħitilha hacker_settings, hekk ejja bidla li.
Bidla kollox biex hacker_settings.
>> Issa fl-aħħar tal-programm tagħna aħna qed tmur jridu jerġgħu lura
għal dak li huwa attwalment ġewwa ta normal_settings,
li se biss look like & normal_settings.
Avviż I ma nbidlux xi normal_settings tiegħi peress oriġinarjament jkollna dan.
Imbagħad għal ftit bidla lura, I jgħaddu lura fl-aħħar.
Dan kien l-aġġornament. Okay.
>> Issa ġewwa ta 'hawn jien ser biss jispjegaw il-kodiċi fl-interess ta' żmien.
Dan m'huwiex il-kodiċi ħafna.
Naraw naqraw karattru mill-fajl. Aħna hija imsejħa f.
Issa inti tista 'raġel fgetc, imma kif fgetc ikun sejjer jaħdem
huwa biss li għaddej biex jirritorna l-karattru li inti biss taqra jew EOF,
li tikkorrispondi mat-tmiem tal-fajl jew xi jiġri żball.
Aħna looping, ikomplu jaqraw karattru wieħed mill-inkartament,
sakemm konna jispiċċaw ta 'karattri li jinqraw.
U filwaqt li aħna qed tagħmel dan, aħna nistennew fuq karattru wieħed mill-istandard pulzieri
Kull darba waħda inti tip xi ħaġa fil-linja tal-kmand,
li l-qari fil-karattru minn standard pulzieri
Imbagħad putchar huwa biss se tpoġġi l-karatteristiċi naqraw up here mill-inkartament li l-istandard.
Tista bniedem putchar, iżda huwa biss it-tqegħid l-istandard out, huwa istampar dan il-karattru.
Inti tista 'wkoll sempliċiment tagħmel printf ("% c", c); L-istess idea.
Li għaddej biex jagħmlu x-massa tal-ħidma tagħna.
>> L-aħħar ħaġa li aħna qed tmur biex trid tagħmel huwa biss fclose fajl tagħna.
Jekk inti ma fclose, li l-nixxija memorja.
Aħna rridu li fclose-fajl aħna oriġinarjament miftuħa, u naħseb li hu.
Jekk nagħmlu dan, I diġà kisbu problemi.
Ejja naraw.
What did li jilmentaw dwar?
Mistenni "int" iżda l-argument huwa tat-tip "Struct _IO_FILE *".
Aħna ser tara jekk li x-xogħlijiet.
Permess biss fil C99. Augh. Okay, jagħmlu hacker_typer.
Issa irridu jiksbu deskrizzjonijiet aktar utli.
Allura l-użu ta 'identifikatur mhux iddikjarat "normal_settings".
I ma sejħa hija normal_settings. I sejħitilha current_settings.
Mela ejja bidla kollha ta 'dak.
Issa tgħaddi l-argument.
I ser jagħmlu dan 0 għal issa.
Okay. . / Hacker_typer cp.c.
I wkoll ma ċar l-iskrin fil-bidu.
Iżda int tista 'tfittex lura għas-sett problema aħħar biex tara kif inti ċar l-iskrin.
Huwa biss l-istampar xi karattri
filwaqt li dan qed tagħmel dak li nixtieq do.
Okay.
U jaħsbu dwar għaliex dan meħtieġ biex tkun 0 minflok stdin,
li għandha tiddefinixxi # 0,
din hija tilmenta li -
Qabel I meta qal li hemm deskritturi fajl iżda imbagħad inti ukoll għandek * FAJL tiegħek,
a deskrittur fajl huwa biss numru sħiħ wieħed,
billi * FILE għandha mazz sħiħ ta 'għalf assoċjati magħha.
Ir-raġuni għandna bżonn li ngħidu 0 minflok stdin
huwa li stdin huwa * FILE li jindika l-ħaġa li hija referenzar descriptor fajl 0.
Allura anke up here meta I do fopen (ARGV [1], jien jkollna * FAJL lura.
Imma x'imkien f'dak * FILE hija ħaġa li jikkorrispondi għall-deskrittur fajl għal dak il-fajl.
Jekk inti tħares lejn il-paġna bniedem għall miftuħa, hekk naħseb li inti ser ikollok tagħmel bniedem 3 miftuħ - Nope -
bniedem 2 miftuħ - yeah.
Jekk inti tħares lejn il-paġna għal miftuħa, miftuħa huwa bħal fopen aktar baxx ta 'livell,
u huwa jirritorna l-deskrittur fajl attwali.
fopen ma mazz ta 'għalf fuq quċċata ta' miftuħa,
li minflok jirritornaw biss li deskrittur fajl prospetti FILE sħiħa * pointer
ġewwa tiegħu huwa deskrittur tagħna fajl ftit.
Allura standard tirreferi għall-ħaġa * FAJL,
billi 0 jirreferi għall biss l-istandard deskrittur fajl fih innifsu.
>> Mistoqsijiet?
[Laughs] Blew permezz ta 'dak.
Kull dritt. Aħna qed isir. [Laughs]
>> [CS50.TV]