[Powered by Google Translate] [NÄDAL 5]
[David J. Malan, Harvard University]
[See on CS50.] [CS50.TV]
[Naine] Ta valetab; mida, ma ei tea.
[Mees] Mida me siis teame?
[Naine] See kell 9.15, Ray Santoya oli ATM.
[Mees] Seega on küsimus selles, mida ta seal 9:16?
[Naine] Laskmine 9 mm juures midagi.
Äkki nägi ta snaiper.
[Mees] Või ta töötas koos temaga.
[Naine] Oota. Mine tagasi üks.
[Mees] Mida sa näed?
[♫ suspenseful muusika ♫]
[Naine] Tooge ta nägu üles. Täisekraan.
[Mees] Tema prillid. >> Seal on peegeldus.
[♫ suspenseful muusika ♫]
[Inimene] See on Nuevita on pesapalli meeskond. See on nende logo.
[Naine] Ja ta räägib kes iganes kannab, et jope.
>> [David Malan] Niisiis, see on CS50 5. nädalal, ja täna me rikume natuke televisiooni ja filmi jaoks.
Nii et kui te vaatate näidata, nagu see siin,
ja politseisse öelda "Kas te puhastate, et up?" või "Tõsta"
puudub suurendada reaalses maailmas.
Tegelikult, mida sa tõesti on natuke midagi sellist.
Olen tõmmata üks töötaja fotod lehel.
See on programm nimega Photoshop. See on 1, 2 Bowdens,
1 of 3 Bowdens tegelikult, täna, sest meil on proua Bowden siin samuti koos Rob ja Paul.
Aga siin on Rob ekraanil, ja kui me suurendada selle helk ta on alati olnud oma silmaga,
mida sa tegelikult näha on, et mida sa näed on, mida sa saad.
See on "täiustatud" nii "CSI" on see natuke vale.
Seal on üks teine ​​klipp, kui me suudame valima "CSI" natuke kauem.
See üks on kena fraas kuuldavale edaspidi, kui soovite
hea tehniline oma sõpradega, kui tõesti, sa räägid midagi.
>> [Mees] Nädalaid Olen uurinud Cabby Killer mõrvad
teatud morbid vaimustus.
[Naine # 1] See on reaalajas.
[Naine # 2] ma luua graafiliselt kasutades Visual Basic, vaatan, kas saan jälgida IP-aadress.
>> [Malan] Nii audio sünkroonist välja kõrvale, luues graafiliselt kasutades Visual Basic
jälgida IP-aadress on täielik nonsenss.
Nendel päevadel te ei kasuta Visual Basic,
pole mingit vajadust GUI, ja IP aadress oli tehniliselt täpne termin.
Nii et hoidke silma peal neid, ja üks mu lemmikuid:
See üks on natuke kauge, sest sa pead teadma eri keeles.
Seal keeles nimetatakse Objective-C, mis on ülemhulk C.
Mis tähendab see C pluss mõned täiendavad funktsioonid, nende seas objektorienteeritud programmeerimine.
Ja see on keel, et Apple on populariseerinud iOS programmeerimine.
Ja et siin on klipi mitmesuguste ürituste kokku, alates "Numbrid"
et kui sa tegelikult vaatad tähelepanelikult oma TiVo ja pausi õigel ajal,
te näete, et see, mida nad otsivad juures ei ole päris, mida kirjeldatakse.
Ja lubage mul proovida erinevaid audio pistik siin ja vaata, kui me ei
hoida heli sünkroonis seekord.
Ma annan sulle "Numbrid".
>> [Mees # 1] See on 32-bitine IPv4 aadress.
[Mees # 2] IP, see on Internet. >> Eravõrkude. See on Anita eravõrk.
[Malan] Okei. See on Objective-C, ja see sinu jaoks mingi lapse värvimine programmi
kui saad ehk järeldada muutuja nimi seal.
Nii et siis oli "Numbrid". Nii et täna ja sel nädalal tutvustame
natuke maailma kohtuekspertiisi ja konteksti probleeme seetõttu.
Täna on lühendatud loeng sest seal on eriline sündmus siin
pärastki, et me võtame piiluda, ja tease nii õpilased kui ka vanemad täna
mõned asjad, mis on silmapiiril.
Neist alates esmaspäevast, siis on veel mõned klassikaaslased.
EDX, Harvardi ja MIT uus online algatus avatud õppematerjali
ja rohkem, on käivitades Harvardi ülikooli esmaspäeval.
Mis tähendab, tulevad esmaspäeval Teil on - nagu eelmise loota,
86000 täiendavaid klassikaaslastega saab pärast koos CS50 loengud
ja lõigud ja walkthroughs ja probleem seab.
Ja osa sellest, siis muutub liikmed avaistung klass
CS50 ja nüüd CS50x.
>> Osana sellest, nüüd aru, et seal on mõned plussid ka.
Et saada selleks valmis, sest tohutu hulk üliõpilasi,
piisab, kui öelda, et kuigi meil on 108 TF ja pädevad,
mitte päris parim õpilane / õpetaja suhe kui me tabanud 80000 teistele õpilastele.
Nii et me ei kavatse olla klassifitseerimine nii palju probleem seab käsitsi.
Nii tutvustas sel nädalal probleem komplekti saab CS50 Kontrolli,
mis saab olema käsurea utiliit jooksul seade
et sa saad kui sa uuendada seda hiljem sel nädalavahetusel,
ja sa pead olema võimeline sõitma käsu kontrollida 50,
ise pset, ja saad mõned tagasisidet selle kohta, kas teie programm on
õige või vale vastavalt erinevatele konstruktsiooni kirjeldused, et oleme andnud.
Nii et rohkem sellest ja lahendamist spetsifikatsioon ja
CS50x klassikaaslastega kasutate seda samuti.
>> Nii et probleem komplekt 4 on kõik umbes ekspertiisi.
Ja see tükk oli inspireeritud mõned reaalse elu kraami,
kusjuures kui ma olin lõpetanud keskkooli, ma interneeritud mõnda aega koos
Middlesex County District Attorney kantseleis tehes kohtuekspertiisi töö
oma plii kohtuekspertiisi uurija ja milline see oli
on, ma arvan, ma mainisin mõne nädala Varem on Mass riigi politsei või teised
oleks tulnud, oleksid nad lahkuvad asjad nagu kõvakettad ja CDd ja disketid
jms, ja siis eesmärk kohtuekspertiisi büroo oli teha kindlaks, kas
seal oli või ei olnud tõendeid mingi.
See oli Special uurimise osakond, nii et see oli valgekraede kuritegevuse,
see oli rohkem vaeva omamoodi kuritegusid,
midagi seotud mingi digitaalse meedia; välja, et ei, et paljud inimesed
kirjutage talle öelda "ma tegin seda."
Nii et üsna sageli need kohtuekspertiisi otsingud ei ilmu kõik, et palju vilja,
kuid mõnikord inimesed kirjutavad selliseid e-kirju.
Nii et mõnikord jõupingutusi premeeriti.
>> Aga elada kuni see kohtuekspertiisi pset, saadame kehtestades pset 4 a bit graafika.
Nii et te ilmselt teha neid asju anda, JPEG, GIF ja nagu nendel päevadel,
aga kui sa tõesti arvad, pilt, palju nagu Rob nägu,
eeskujuks võiks olla jadana täpid, või pikslit.
Nüüd, kui tegemist on Rob nägu, seal on igasuguseid värve,
ja hakkasime näha üksikuid punkte, otherwide tuntakse pikslit,
kui hakkasime suumimiseks
Aga kui me lihtsustada maailma natuke, ja lihtsalt öelda, et see siin on Rob
must-valge, hästi esindama must ja valge saame lihtsalt kasutada binaarse.
Ja kui me ei kavatse kasutada binaarne, 1 või 0, saame väljendada seda sama pilt
Rob naeratav nägu see muster bitti: 11000011 esindab
valge, valge, must, must, must, must, valge valge.
Ja nii see ei ole väga suur samm, siis hakkama rääkima värvilisi fotosid.
Asjad, mis sa näeksid Facebookis või võtta digikaamera,
kuid kindlasti, kui tegemist on värve, mida vaja rohkem bitte.
Ja üsna levinud maailma piltidest on kasutada mitte 1-bitine värv,
kui see ütleb, kuid 24-bitine värv, kus sa tegelikult saad miljoneid värve.
Nii nagu siis, kui me suurendada sisse Rob silma,
see oli suvaline arv miljoneid erinevaid värvikaid võimalusi.
>> Nii et me tutvustada seda Ülesanded nr 4, samuti ülevaadet,
mis on täna kell 03:30 asemel tavalisi 02:30 tõttu reedel loeng siin.
Aga video on Internetis, nagu tavaliselt, homme.
Me ka tutvustada teile teises failivormingus.
Nii et see on tahtlikult mõeldud vaatama hirmutavalt esimesel,
aga see on lihtsalt mingi dokumentatsioon C struct.
Selgub, et Microsoft aastat tagasi aitasid populariseerida seda formaati,
nimetatakse bitmap faili formaat, BMP, ja see oli super-lihtne,
värviline graafiline vorming, mida kasutati juba mõnda aega
ja mõnikord veel taustapilte lauale.
Kui te arvate tagasi Windows XP ja jooksva mäed ja sinine taevas,
mis oli tavaliselt BMP, või bitmap pilt ja rasterpildid
on lõbus juures, sest neil on natuke rohkem keeruline.
See ei ole päris nii lihtne see ruudustik 0-ja 1-d;
selle asemel, sa pead asjad päise alguses faili.
Nii teisisõnu sees. Bmp fail on terve hunnik 0-ja 1-d,
kuid seal on mõned täiendavad 0-ja 1 on seal.
Ja selgub, et me oleme tõenäoliselt iseenesestmõistetavaks aastaid,
failivorminguid nagu. doc või. xls või. mp3 või. mp4,
olenemata failivorminguid, et te olete juba tuttav.
Noh, mis see üldse tähendab olla failivorming?
Sest lõpus päev, kõik need failid, mida me kasutame on lihtsalt 0-ja 1 aasta
ja võibolla need 0-ja 1 on esindada, b, c kaudu ASCII vms,
kuid läbi lõpuks, see on lihtsalt 0-ja 1 aasta.
>> Nii et inimesed lihtsalt aeg-ajalt otsustada leiutada uus failivorming
kus nad standardida mida mustrid bitti tähendab tegelikult.
Ja selles asjas, inimesed, kes loodud bitmap faili formaat
ütles, et kõige esimene bait bitmap faili, kui tähistatakse plokist 0, seal,
seal saab olema mingi cryptically nimega muutuja nimega bfType,
mis lihtsalt seisab bitmap faili tüüp; millist tüüpi bitmap faili see on.
Võite järeldada, ehk alates teisest reast, et kompenseerida 2 baidi number 2,
on muster 0-ja 1 aasta, mis tähistab mis?
Suurust midagi, ja see läheb edasi sealt.
Nii et probleem komplekt 4, siis saad kõndis läbi mõned neist asjadest.
>> Me ei jõua hooliv neid kõiki, kuid märgata ta hakkab saama huvitav
ümber rida või bait 54, rgbtBlue, roheline ja punane.
Kui olete kunagi kuulnud akronüüm RGB, punane roheline sinine, see on viide sellele.
Sest tuleb välja, võid joonistada kõik värvid vikerkaar
mõned kombinatsioon punane ja sinine ja roheline.
Ja tegelikult, vanemad ruumis võiks meenutada, mõned varem projektorid.
Nendel päevadel, sa lihtsalt vaata 1 eredat valgust tulevad välja objektiiv.
Aga juba järgmisel päeval, siis tuli punane lääts, sinine objektiiv, ja roheline lääts
ja koos nad on suunatud ekraani ja moodustasid värviline pilt.
Ja üsna sageli keskastme koolide ja gümnaasiumid oleksid need läätsed
kunagi-nii-veidi viltu, et sa olid omamoodi näeme topelt-või kolmekordne pilte,
aga see oli mõte. Sul oli punane ja roheline ja sinine valgus maali pilt.
Ja see sama põhimõtet on kasutatud ka arvutid.
>> Nii väljakutsete hulgas, siis sinu jaoks probleem komplekt 4
ei kavatse olla mõned asjad, üks on tegelikult resize pilt.
Et võtta muster 0-ja 1-d,
aru saada, mis tükkideks 0-ja 1 on esindada Mida struktuur niimoodi,
ja siis nuputada, kuidas imiteerida piksleid: punased, sinised, rohelised
sees nii, et kui pilt näeb välja selline esialgu tunduda see mitte pärast seda.
Muude probleemidega, liiga, saab olema, et saad kätte
kohtuekspertiisi pilt tegeliku faili digikaamera
ja selle kaamerast, kunagi ammu, olid terve hunnik pilte.
Probleem on selles, me kogemata kustutada või oli pilt rikutud kuidagi.
Halvad asjad juhtuvad digitaalkaamerad, ja nii me kiiresti kopeerida kõik 0-ja 1 aasta
ära selle kaardi sulle, salvestatakse need kõik 1 suur fail, ja siis me aga neid teile
Probleemse komplekt 4 nii, et saate kirjutada programm C keeles, mille abil taastada
kõik need JPEG, ideaalis.
Ja selgub, et JPEG, kuigi nad on mõnevõrra keeruline failivorming,
nad on palju keerulisem kui see naeratav nägu siin.
Tuleb välja, et iga JPEG algab samade mustrite 0-ja 1 aasta.
Nii et kasutades samas loop või loop vms,
saate kinnitada, üle kõigi 0-ja 1 on selles kohtuekspertiisi pilt
ja iga kord näed eriline muster, mis on määratletud probleemi komplekt spetsifikatsioonile,
võite eeldada, "Oh, siin on väga suur tõenäosus,
algust JPEG, ja niipea kui sa leiad sama mudeli
mõned baitide arvu või kilobaiti või megabaiti hiljem
võite eeldada, "Ooh! Siin on teine ​​JPEG, foto võtsin pärast esimest.
Lubage mul lõpetada lugemine, et esimese faili, hakake seda uuega. "
Ja väljund oma programmi pset 4 kavatse olla koguni 50 JPEG.
Ja kui see on mitte 50 JPEG, sul on natuke silmus.
Kui teil on lõpmatu arv JPEG, teil on lõputu silmuse.
Nii et, liiga, on üsna levinud puhul.
Seda on silmapiiril.
>> Viktoriin 0, seljataga. Aru, ühe minu e-posti, et alati on olemas inimesed
kes on mõlemad õnnelikud, justkui neutraalne, ja kurb ümber viktoriin 0 korda.
Ja palun ärge jõuda mind, pea TFS, Zamyla, oma TF
või üks CAd, et sa tead, kui sa tahaksid arutada, kuidas asjad läksid.
>> Nii muljet vanemad siin ruumis,
Mis on CS50 raamatukogu? Hea töö.
Mis CS50 raamatukogu? Jah? [Student vastuseid, arusaamatult]
>> Olgu, hästi. Nii et see on prewritten komplekt kood, mis me, töötajad, kirjutas
pakume teile pakkuda mõned ühised funktsioonid.
Asju mulle string; mind int, kõik funktsioonid, mis on loetletud siin.
Alustades nüüd, hakkame tõesti võtta need abirattad maha.
Nii et me ei kavatse hakata ära võtta "string" sinult,
mis, mäletate, oli lihtsalt sünonüüm, mida tegelik andmetüüp? char *.
Nii et vanemad, et ilmselt - see on hea, nii char * me hakkame nägema
ekraanil enam kui me eemaldada "string" oma sõnavarast,
vähemalt kui tegemist on tegelikult kirjalikult koodi.
Samamoodi, siis lõpetame kasutades mõned neist funktsioonidest nii palju,
sest meie programmid ei hakka keerukamaid
mitte lihtsalt kirjutada programme, mis seal istuda koos kiire vilkumine,
ootab kasutaja tüüp midagi sisse
Sa saad oma sisendeid mujalt.
Näiteks saad neid ka mitme bitti kohalikul kõvakettal.
Sul asemel saada neid tulevikus võrguühenduse mõned koduleheküljel kusagil.
Nii et olgem koor tagasi see kiht esimest korda, ja tõmba CS50 seadme
ja see fail nimega CS50.h, mis sa oled olnud terav ka nädalaid.
>> Kuid olgem tegelikult näha, mis seal sees sellest.
Nii ülemisel faili sinine on lihtsalt terve hunnik märkusi,
garantii ja litsentsimist. See on omamoodi ühise paradigma
tarkvara, sest palju tarkvara nendel päevadel on, mida nimetatakse "open source"
mis tähendab, et keegi on kirjutanud kood
ja teinud seda vabalt kättesaadavad, mitte ainult joosta ja kasutada,
kuid tegelikult lugeda ja muuta ja integreerida oma töö.
Nii see on, mida olete kasutanud, avatud lähtekoodiga tarkvara,
kuigi väga väike vorm.
Kui ma keri minevikku kommentaare, aga me hakkame nägema mõned tuttavad asjad.
Nii märkate ülaosas siin, et CS50.h fail sisaldab terve hunniku päisefaile.
Nüüd, enamik neist ei ole me näinud, kuid üks on
tuttav; kumb neist oleme näinud, kuigi lühidalt, siiani?
Jah, standard raamatukogud. Stdlib.h on malloc,
nii kui me hakkasime rääkima dünaamiline mälu eraldamise,
mis me tuleme tagasi järgmisel nädalal ning alustasime ka selle faili.
Selgub, et bool ja õige ja vale tegelikult ei eksisteeri C iseenesest
kui sa lisada see fail siin.
Nii oleme, nädalaid, on ka standard bool.h
nii, et saate kasutada mõistet bool, õige või vale.
Ilma selleta oleks teil sorteerida võltsitud ja kasutab int
ja lihtsalt suvaliselt eeldada, et 0 on vale ja 1 on tõsi.
>> Nüüd, kui me kerige edasi, siin on meie mõiste string.
Selgub, nagu me oleme varem öelnud, et kui see * on ei ole tegelikult küsimus.
Võite isegi ruumi kõikjalt.
Meie, see semester, on selle edendamisel see selgeks teha, et * on pistmist tüüp.
Aga aru, lihtsalt nii levinud, kui mitte veidi rohkem levinud, on panna see sinna
kuid funktsionaalselt on see sama asi.
Aga nüüd, kui me loeme ette veelgi, võtame pilk öelda, GetInt,
sest me kasutasime, et ehk enne midagi muud see semester.
Ja siin on GetInt. See on see, mida?
See on prototüüp. Nii tihti, oleme pannud prototüüpide tippude meie. C faili,
kuid võite ka panna prototüüpide päisefaile. h failid,
nagu see siin, nii et kui kirjutad teatud funktsioonide
et sa tahad, et teised inimesed saaksid kasutada, mis on täpselt puhul CS50 raamatukogu,
te mitte ainult ellu oma ülesandeid midagi CS50.c,
sa ka panna prototüüpe ei ülaosas et faili, kuid ülaosas päisefail,
siis päisefail on see, mida sõbrad ja kolleegid hõlmavad
teravate lisada oma koodi.
Nii et kõik see aeg olete olnud ka kõik need prototüübid
tõhusalt ülaosas oma faili, kuid teel selle terava sisaldama mehhanismi
et sisuliselt koopiad ja pastad see fail oma.
Nüüd, siin on mõned üsna üksikasjalikud dokumendid.
>> Me oleme päris palju enesestmõistetavaks, et GetInt saab int,
aga tuleb välja, seal on mõnes nurgas juhtudel, eks?
Mis siis, kui kasutaja liigid number, mis on liiga suur?
Kvintiljon, et lihtsalt ei sobi sees int?
Milline on oodatav käitumine? Noh, ideaalis, see on ennustatav.
Nii et sel juhul, kui te tegelikult lugeda trahvi print,
te näete, et kui liin ei saa lugeda, see naaseb INT_MAX.
Me pole kunagi sellest rääkinud, kuid põhineb kapitaliseerimine,
mis see on, ilmselt?
See on pidev, nii et see on mingi eriline konstant, mis on arvatavasti kuulutatud
ühes neist päisefaile et teoksil suurem fail,
ja INT_MAX on ilmselt midagi, jämedalt, 2 miljardi euroni.
Idee on selles, et kuna me peame kuidagi tähendada, et midagi läks valesti,
me, jah, on 4000000000 numbrid meie käsutuses,
negatiivne 2 miljardit kuni 2 miljardit anda või võtta.
Noh, mis on levinud programmeerimine sa varastada vaid üks nendest numbritest.
Võibolla 0, võibolla 2 miljardit ehk negatiivne 2 miljardit eurot.
Nii et sa kulutad ühe oma võimalikest väärtustest, nii et saate pühenduda maailma
et kui midagi läheb valesti, ma tulen tagasi selle super-suur väärtus.
Aga sa ei taha kasutaja kirjutades midagi segasena nagu "2, 3, 4 ..."
tõesti suur number, kuhu üldistada selle asemel pidevalt.
Nii et tõesti, kui sa olid anal viimastel nädalatel,
millal helistada GetInt, sa oleks pidanud kontrollides kui seisukorras.
Kas kasutaja kirjuta INT_MAX, või täpsemalt,
tegin GetInt tagasi INT_MAX? Sest kui ta seda tegi,
et tegelikult tähendab, et nad ei kirjuta see, midagi läks valesti antud juhul.
Nii et see on see, mis üldiselt tuntud kui "kontroll" väärtus, mis tähendab lihtsalt eriline.
>> Noh, nüüd saab sisse. C faile.
C fail on olemas seadet mõnda aega,
ja tegelikult on seadmel see kompileeritud teile
arvesse, et asi nimega "objekti kood"
aga see lihtsalt ei loe teile kus see on, sest süsteem teab,
sel juhul, kui see on seadme.
Kuid olgem kerige nüüd GetInt, ja vaata, kuidas GetInt on töötanud kogu selle aja.
Nii et siin on meil sarnane kommentaarid enne.
Lubage mul suumida lihtsalt koodi osa,
ja mida meil on GetInt on järgmine.
See ei võta sisend ja tagastab int, while (true), nii et meil on tahtlik lõputu silmuse
kuid kõigi eelduste kohaselt me ​​murda läbi selle kuidagi, või naasta seest seda.
Nii et vaatame, kuidas see töötab. Noh, me näivad kasutavat getString
Selles esimeses reas sees silmus, 166.
See on nüüd hea tava sest millistel tingimustel
võiks getString tagasi see eriline märksõna, NULL?
Kui midagi läheb valesti. Mis saaks valesti minna, kui helistate midagi getString?
Jah? [Student vastus, arusaamatult] >> Jah. Nii et äkki malloc ebaõnnestub.
Kuskil all kapuuts getString helistatakse malloc,
mis eraldab mälu, mis võimaldab arvutisse salvestada
kõik märgid, et kasutaja sisestada klaviatuurilt.
Ja oletame kasutaja oli palju vaba aega
ja trükitud rohkem, näiteks kui 2 miljardit märki.
Rohkem märke kui arvuti on isegi RAM.
Noh, getString peab suutma tähenda, et teile,
isegi kui see on super, super aeg-ajalt nurga puhul.
See peab kuidagi suutma sellega hakkama, ja nii getString,
kui me läheme tagasi ja loe selle dokumentatsiooni, ei, tegelikult tagasi NULL.
Nüüd kui getString ei tagastades NULL, GetInt läheb pankrotti minna
tagastades INT_MAX, nagu sentinel.
Need on vaid inimese konventsioonidega. Ainus viis sa teaksid, see on nii
on lugedes dokumentatsiooni.
Nii et olgem kerige kus int on tegelikult GotInt.
>> Nii et kui ma keri natuke edasi, lähtudes 170 meil kommentaar eespool nimetatud liinidel.
Nii et me kuulutame, 172, int n ja char c, ja siis see uus funktsioon
mis mõned teist on komistas kogu enne, kuid sscanf.
See tähistab stringi scan f.
Teisisõnu, mulle nööri ja ma skaneerida seda tükki huvipakkuvat informatsiooni.
Nii et mida see tähendab? Noh, oletame, et ma kirjutada, sõna otseses mõttes, 1 2 3 juures klaviatuur,
ja seejärel vajutage enter. Mis on andmete tüüpi 1 2 3 kui tagastatud getString?
See on ilmselt string, eks? Mul on string, nii 1 2 3 ei ole tegelikult "1 2 3"
koos \ 0 lõpus ta. See ei ole int.
See pole number. Tundub arv, kuid see ei ole tegelikult.
Mis siis GetInt pead tegema? See on skaneerida et string vasakult paremale,
1 2 3 \ 0, ja kuidagi teisendada see tegelik täisarv.
Nüüd võid nuputada, kuidas seda teha.
Kui te arvate tagasi pset 2, siis arvatavasti on üks väike mugav
Caesar või vigenere siis võite kinnitada, üle nööri,
saate teisendada jutumärke ints koos valida. See on palju tööd.
Miks mitte helistada funktsioon nagu sscanf et kas see sinu jaoks?
Nii sscanf loodab argument, sel juhul nimetatakse joont, mis on string.
Seejärel tuleb määrata, jutumärkides, väga sarnane printf,
Mida ootate, et näha selle stringi?
Millest ma räägin siin on, ma oodata kümnendmurruna ja võibolla iseloomu.
Ja me näeme, miks see nii on vaid hetk.
Selgub, et see märge on nüüd meenutab värk
hakkasime rääkima veidi üle nädala tagasi.
>> Mis on & n ja & c teed meile siin? [Student vastuseid, arusaamatult]
>> Jah. See annab mulle aadressi n ja aadress c.
Nüüd, miks see nii tähtis on? Noh, sa tead, et koos funktsioonide C
sa võid alati tagastab väärtuse või puudub igasugune väärtus.
Te saate tagastada int, string, float, char, mida iganes.
Või võite pöörduda tühine, kuid võite ainult tagasi 1 asi maksimaalselt.
Aga siin me tahame sscanf naasta mind äkki int, kümnendmurruna
ja ka char, ja ma seletan, miks char hetkel.
Nii et sa tegelikult tahad f tagasi 2 asja; et lihtsalt ei ole võimalik C.
Nii saab töö ümber, et sooritades 2 aadressid,
sest niipea kui sa ulataksid funktsioon 2 aadressid, mida saab sellele funktsioonile nendega teha?
Sellega on võimalik kirjutada neile aadressidele. Võite kasutada * käitamine ja "sinna minna", et kõik need aadressid.
See on omamoodi see tagauks mehhanism, kuid väga levinud muutmise väärtused muutujatele
rohkem kui lihtsalt 1 koht, sel juhul 2.
Nüüd märkate Ma kontrollimine == to1 ning pöördub n kui see tegelikult hinnata tõeseks.
Mis siis toimub? Noh, tehniliselt kõik tõesti tahame juhtuda GetInt on see.
Me tahame sõeluda niiöelda; me tahame lugeda string
"1 2 3" ja kui tundub, et seal on mitmeid seal,
mida me ütlen sscanf tegema pannakse see arv, 1 2 3 See muutuja n minu jaoks.
Miks siis tegin ma seda ka?
Mis rolli mängib ka öelda, sscanf, võite ka saada iseloomu siin.
[Student keelt, arusaamatult] >> Ei - koma võiks toimida.
Olgem hoidke, et mõtles hetke. Mis veel?
[Student, arusaamatult] >> Nii hea mõte, võiks see olla null iseloomu.
See on tegelikult mitte, antud juhul. Jah? [Student, arusaamatult]
>> >> ASCII. Või las ma üldistada veelgi.
% C on lihtsalt viga kontrollimise.
Me ei taha seal olla märk pärast arvu,
aga mida see võimaldab mul teha on järgmised:
Selgub, et sscanf lisaks ladustamiseks väärtused n ja c, selles näites siin,
Mis see ka ei ole siis tagastab arvu muutujate ta pani väärtused sisse
Nii et kui sa ainult kirjutad 1 2 3, siis ainult% d saab sobitada
ja ainult n saab ladustada, mille väärtus on nagu 1 2 3 ja midagi saab panna c;
c jääb prügi väärtus, kui nii võib öelda.
Prügi sest see on kunagi olnud käivitub nagu mingi väärtus.
Nii et sel juhul, sscanf tagastab 1, sest ma asustatud üks neist suunanäitajaks,
sellisel juhul suur. Mul on int, nii et ma vabastada liin vabastada mälu
et getString tegelikult eraldatud, ja siis ma tagasi n.
Else, kui te kunagi mõelnud, kui et uuesti avalduse pärineb, pärineb just siin.
Kui aga, I tüüpi 1 2 3 suva,
lihtsalt mõne juhusliku jada teksti, sscanf on näeme,
ooh, number, ooh, number, ooh, number, ooh - f.
Ja see läheb üles 1 2 3 n.
See saab panna f-c, ja siis tagasi 2.
Nii et meil on, lihtsalt kasutades põhimõiste scanf käitumist,
väga lihtne viis - noh, keeruline esmapilgul, kuid lõpus päeval,
üsna lihtne mehhanism öeldes on seal keskmine, ja kui on, siis on see ainus asi, mis ma leidsin?
Ja tühja ruumi siin on tahtlik. Kui sa loed dokumentatsiooni sscanf,
see ütleb teile, et kui te sisaldama tükk tühja ruumi algusesse või lõppu,
sscanf liiga võimaldab kasutajal ükskõik millisel põhjusel, lüüa tühikut 1 2 3, ning mis on õigustatud.
See ei karju kasutaja lihtsalt sellepärast, et nad tabanud tühiku alguses või lõpus,
mis on natuke rohkem kasutajasõbralikumaks.
>> Kõik küsimused, siis edasi GetInts? Jah?
[Student küsimus, arusaamatult]
>> Hea küsimus. Mis siis, kui sa lihtsalt kirjutada char, nagu f, ja vajuta enter
pole kunagi kirjutades 1 2 3; mis sa arvad käitumist rida koodi oleks siis?
Nii sscanf võib katta et liiga, sest sel juhul
ta ei kavatse täita n või c; siis läheb selle asemel tagastab 0.
Sellisel juhul ma ka püüdmine et stsenaarium, sest eeldatav maksumus tahan on 1.
Ma tahan ainult 1 ja ainult 1 asi, mida tuleb täita. Hea küsimus. Teised?
>> Olgu, lähme ei lähe läbi kõik funktsioonid siin,
kuid üks, mis tundub olevat, ehk järelejäänud huvi
on getString sest selgub, et GetFloat, GetInt,
GetDouble, GetLongLong kõik punt palju nende funktsionaalsus getString.
Võtame vaadata, kuidas ta on rakendanud siin.
See üks tundub veidi keeruline, kuid see kasutab sama põhialuste
et me hakkasime rääkima eelmisel nädalal. Nii getString,
mis ei võta argumenti ühe tühine siin,
ja see tagastab stringi, nii kuulutan ma string nimega puhver.
Ma tõesti ei tea, mis see olema saab kasutada veel, aga eks näis.
Paistab võimsus on, vaikimisi 0; ei ole päris kindel, kuhu see viib.
Ei tea, mida n läheb kasutada veel.
Aga nüüd see muutub veidi huvitav, nii et liin 243,
me kuulutame int c, see on omamoodi loll detail.
Char on 8 bitti, ja 8 bitti saab salvestada mitu erinevat väärtust?
256. Probleem on selles, kui sa tahad olla 256 erinevat ASCII sümboleid,
mis on, kui te arvate tagasi, ja see ei ole midagi meelde jätta.
Aga kui te arvate tagasi, et suur ASCII diagramm meil oli nädal tagasi
oli, et sellisel juhul, 128 või 256 ASCII tähemärki.
Me kasutasime kõiki mudeleid 0-ja 1 teoksil.
See on probleem, kui soovite, et oleks võimalik leida vigu.
Sest kui sa oled juba kasutatakse 256 väärtused oma märki,
sa ei ole tegelikult ette planeerida, sest nüüd on kuidagi võimalik öelda,
"See ei ole legit iseloomu, see on mingi vale teade."
Mis siis maailmas ei ole, kasutavad nad järgmine suurem väärtus,
midagi int nii et teil on hull bittide arv,
32 4000000000 võimalikud väärtused, nii et saate lihtsalt lõpuks kasutavad,
sisuliselt, 257 neist 1, mis on mingil erilisel tähendus viga.
>> Nii et vaatame, kuidas see töötab. Kooskõlas 246, Mul on selline suur samas loop
et helistatakse fgetc; f tähenduses faili, getc ja seejärel stdin.
Selgub, et see on lihtsalt täpsem viis öelda "loe sisend klaviatuuri."
Standard sisend tähendab klaviatuur, standardväljundisse tähendab ekraani,
ja standardviga, mis me näeme pset 4, tähendab ekraani,
kuid eriline osa ekraanil, nii et see ei conflated
koos tegeliku võimsuse, mida kavatsetakse trükkida, kuid rohkem sellest ka tulevikus.
Nii fgetc tähendab lihtsalt lugeda üks sümbolitest klaviatuuri ja hoidke seda kus?
Hoidke seda c, ja siis vaadata, nii et ma olen lihtsalt kasutades mõned boolean sidesõnad siin,
kontrollige, et see ei ole võrdsed \ n, nii et kasutaja ei vajuta enter.
Me tahame peatus sel hetkel, lõpuks silmus, ja me tahame ka, et kontrollida
spetsiaalse pidev, EOF, mis, kui sa tead või arvata - mida see seisma?
Faili lõppu. Nii et see on selline mõttetu, sest kui ma olen masinakirja kell klaviatuur,
seal on tõesti mingit faili kaasatud,
aga see on lihtsalt omamoodi üldine termin, mis tähendab
et midagi muud on pärit inimese sõrmed. EOF. Faili lõppu.
Nagu kõrvale, kui sa oled kunagi tabanud kontrolli d oma klaviatuuri,
Mitte, et te oleks veel; olete tabanud kontroll c.
Aga kontrolli d saadab see eriline pidev nimetatakse EOF.
>> Nüüd me lihtsalt mõned dünaamiline mälu eraldamisel.
Nii et kui n + 1> mahutavus, nüüd ma seletan n.
n on lihtsalt mitu baiti on praegu puhver,
string, mis sa praegu ülesehitamisel kasutaja.
Kui teil on rohkem sümboleid oma puhver kui teil on võime puhver,
intuitiivselt, mida me peame tegema, siis on eraldada rohkem võimsust.
Ma lähen koorima üle mõned aritmeetika siin
ja keskenduda ainult see funktsioon siin.
Tead mis malloc on, või vähemalt üldiselt tuttav.
Take A Guess mida RealLOC teeb. [Student vastus, arusaamatult]
>> Jah. Ja see ei ole päris mälu lisamiseks, see reallocates mälu järgmiselt:
Kui seal on veel ruumi lõpus stringi teile rohkem, et mälu
kui see algselt annab, siis saad selle lisamälu.
Nii saad lihtsalt paneb stringid tähemärki seljad et seljad.
Aga kui see pole nii, sest sa ootasid liiga kaua
ja midagi juhuslikult sain plopped mällu seal, kuid seal on pildi
mälu siin all, pole hullu. RealLOC kavatseb teha kõik raske töö teile,
liikuda string olete lugenud seni siit,
pane see sinna alla, ja siis annan teile mõned rohkem raja selles punktis.
Nii laine poolt, lubage mul öelda, et getString teeb
on see algab väikese puhvri, võibolla 1 üksikmärki,
ja kui kasutaja liigid 2 märki, getString jõuab
kutsudes RealLOC ja ütleb: "Ooh, 1 märk sellest ei piisanud.
Andke mulle 2 märki. " Siis kui sa loed läbi loogika ahel,
see saab öelda: "Ooh, kasutaja trükkida 3 tähemärki.
Anna mulle nüüd mitte 2 vaid 4 tähemärki, siis anna mulle 8, siis anna mulle 16 ja 32 ".
Asjaolu, et ma olen kahekordistada võimsust iga kord
tähendab, et puhvrit ei hakka kasvama aeglaselt.
See saab kasvatada super kiire, ja milline võiks olla kasu on?
Miks ma kahekordistades puhver, kuigi kasutaja
võib lihtsalt vaja 1 pildi tegelasele klaviatuuri?
[Student vastus, arusaamatult]. >> Mis see on?
Täpselt. Sa ei pea kasvada nii tihti.
Ja see on lihtsalt selline - sa oled maandamiseks oma ennustused siia.
Idee on selles, et sa ei taha helistada RealLOC palju, sest see kipub olema aeglane.
Iga kord, kui küsida operatsioonisüsteemi mälu, nagu te varsti näha
Tulevasel lahendamist, see kipub aega võtta.
Nii, et vähendada seda aega, isegi kui sa raiskad ruumi, kipub olema hea.
>> Aga kui me loeme läbi viimase osa getString siin,
ja jälle mõista iga rida ei ole siin nii oluline täna.
Aga teate, et see lõpuks kutsub malloc jälle, ja siis jaotab
täpselt nii palju baite kui ta vajab string
ja siis viskab ära, helistades tasuta, liiga suur puhver,
kui ta tõepoolest ei saanud kahekordistunud liiga palju kordi.
Lühidalt, see on, kuidas getString on töötanud kogu selle aja.
Kõik see loeb ühe märgi korraga uuesti ja uuesti ja uuesti
ja iga kord, kui ta vajab täiendavat mälu, siis küsib operatsioonisüsteemi ta, kutsudes RealLOC.
Kas on küsimusi? Hea küll.
>> Rünnak. Nüüd, kui me mõistame suunanäitajaks, või vähemalt
on üha tuttav suunanäitajaks,
Vaatleme, kuidas kogu maailm hakkab kokku varisema
kui sa ei ole päris kaitsta vastu võistleva kasutajad,
inimesed, kes üritavad häkkida oma süsteemi.
Inimesed, kes üritavad varastada oma tarkvara kõrvale mõned registreerimiskood
et nad muidu tüübi sisse
Heitke pilk see näiteks siin, mis on vaid C-koodi
et on funktsioon peamine allosas, mis nõuab funktsiooni suva,
ja milleks seda möödaminnes suva? [Student] üks argument.
>> Üks argument. Nii argv [1], mis tähendab esimene sõna kasutaja sisestatud
käsureal pärast a.out või mis iganes programm on kutsutud.
Nii et suva, ülaosas, võtab ka char *, kuid char * on just see, mida?
String. Ei ole midagi uut siin, ja see string omavoliliselt kutsutakse baar.
Seda joont siin, char c [12], on omamoodi pooleldi tehniline inglise keel, mida see joon teed?
Array -? Tegelased. Anna mulle massiivi 12 tähemärki.
Nii et me võiksime nimetada seda puhvrit. See on tehniliselt nimetatakse C, kuid puhver programmeerimine
tähendab lihtsalt hunnik ruumi, mida saab panna mõned asjad sisse
>> Siis lõpuks memcpy, me pole varem kasutanud.
Aga sa võid ilmselt ära, mida ta teeb. See kopeerib mälu.
Mida see teeb? Noh, see ilmselt kopeerib baar, oma panuse sisseveo c,
aga ainult kuni pikkus baar.
Aga seal on viga siin.
Okei, nii et tehniliselt me ​​peaksime tõesti strlen (bar) x sizeof (char), mis on õige.
Aga halvemal juhul siin Oletame, et see on - jah, okei.
Siis on 2 vead. Nii sizeof (char), olgu, teeme sellest veidi laiem.
Nüüd on veel bug, mis on mis?
[Student vastus, arusaamatult] >> Kontrolli milleks? Okei, nii et me tuleks kontrollida
for null, sest halvad asjad juhtuvad siis, kui kursor on NULL,
Sest sa sattuda sinna minna, ja sa ei tohi kunagi läheb NULL
poolt viite mahavõtmine seda * operaator.
Nii et see on hea, ja mida muud me teeme? Loogiliselt seal on viga ka siin.
[Student vastus, arusaamatult]
>> Nii et kas argc ≥ 2?
Okei, nii et seal on 3 vead selles programmis siin.
Me ei kontrolli, kui kasutaja tegelikult sisestatud midagi sisse argv [1] hea.
Mis siis kolmandal viga? Jah?
[Student vastus, arusaamatult] >> Hea.
Nii et me kontrollisime üks stsenaarium. Me kaudselt kontrollida ei kopeeri rohkem mälu
kui ületaks pikkus baar.
Nii et kui string kasutaja sisestatud on 10 tähemärki pikk,
see ütleb: "Ainult kopeerida 10 tähemärki."
Ja see on okei, aga mis siis, kui kasutaja sisestatud sõna käsureale
nagu 20 tähte sõna, see on, ütles koopia 20 tähemärki alates baar, milliseid?
c, muidu tuntud meie puhver, mis tähendab, et sa lihtsalt kirjutasid andmed
8 baidi asukohad, mida ei oma,
ja sul ei ole neid selles mõttes, et sa kunagi eraldatud neile.
Nii et see on see, mis üldiselt tuntud kui buffer overflow rünnak,
või puhvri ületäitumise rünnak, ja see rünnak selles mõttes, et kui kasutaja
või programm, mis helistab oma funktsioon teeb seda pahatahtlikult,
Mis tegelikult juhtub järgmisena võiks olla üsna halb.
>> Võtame pilk see pilt siin.
See pilt kujutab oma korstnat mälu.
Ja meelde tuletada, et iga kord, kui helistate funktsiooni,
sa saad seda väikest raami virna ja siis teine ​​ja siis teine ​​ja siis teine.
Ja siiani oleme lihtsalt selline ammutatud need ära nagu ristkülikud
kas seal laual või ekraanil siin.
Aga kui me suumida üks neist ristkülik,
kui te helistate funktsiooni suva, selgub, et seal on rohkem korstnat
sees, et raam ja et ristküliku
kui lihtsalt x ja y ja a ja b, nagu me ei räägi swap.
Selgub, et mõned madalama taseme üksikasju,
nende seas saatja aadress.
Nii selgub, kui peamine nõuab suva, peamine on, et teavitada foo
Mis peamine aadress on arvuti mällu.
Sest muidu, niipea kui suva tehakse täidesaatva, nagu käesolevas asjas,
kui jõuad selle lähedale lokkis traksidega lõpus suva,
kuidas kuradit see foo tea, kus kontroll programmi peaks minema?
Tuleb välja, et vastus sellele küsimusele on, et punane ristkülik siin.
See on kursor, ja see on kuni arvuti salvestada ajutiselt,
aasta nn korstna aadress peamiselt selleks, et niipea kui suva tehakse täidesaatva,
arvuti teab kus ja mis real peamine, et minna tagasi.
Salvestatud raam osuti puudutab sarnaselt sellele.
Char * baar siin näitab, mida?
Noh, nüüd on see sinine segment siin on suva raami, mis on baar?
Okei, nii et baar on lihtsalt väide, et suva funktsioon.
>> Nüüd oleme tagasi tuttav pilt.
Seal on rohkem asju ja rohkem tähelepanu kõrvale juhitakse ekraanil
kuid see helesinine segmendis on see, mida me oleme toetudes kriiditahvel jaoks midagi swap.
See on raami suva ja ainus asi just nüüd on baar,
mis on see parameeter.
Aga mis siis veel peaks olema korstna vastavalt käesoleva seadustiku siin?
Char c [12]. Nii et me peaks ka näha 12 ruutu mälu,
eraldatud muutuja nimega c.
Ja tõepoolest me ei ole seda ekraanil.
Väga top on C [0], ja siis autor selle skeem
ei viitsinud joonistus kõik ruudud, kuid on ka 12 seal
sest kui te vaatate all paremal, c [11], kui loete 0, on 12 sellist baiti.
Aga siin on probleem: millises suunas c kasvab?
Omamoodi ülevalt alla, eks? Kui see hakkab ülaosas ja kasvab alt,
ei tundu nagu me lahkusime ise palju raja siin üldse.
Oleme omamoodi värvitud end nurka,
ja et c [11] on õigus kuni vastu baar, mis on õigus kuni vastu freimi pointer,
mis on õigus kuni vastu saatja aadress, seal ei ole enam ruumi.
Mis siis kaudselt, siis kui sa kägardama,
ja sa püüad lugemine 20 baiti arvesse 12-byte puhver?
Kuhu need 8 täiendavat baiti lähe?
Toas kõik muu, millest mõned on super oluline.
Ja kõige tähtsam, potentsiaalselt on punane kast seal, saatja aadress.
Sest arvan, et sa oled kas kogemata või adversarially
kirjuta need 4 baiti, et osuti aadress,
mitte ainult prügi, kuid number, mis juhtub esindama tegelik aadress mälu?
Mis implicaiton loogiliselt?
[Student vastuseid, arusaamatult] >> Täpselt. Kui foo tagasi
ja lööke, et lokkis traksidega, programm läheb edasi mitte naasta peamine,
see läheb tagasi iganes aadress on, et punane kast.
>> Nüüd, kui tegemist kõrvalehoidmise tarkvara registreerimine,
Mis on aadress, mis kuramuse tagasi on funktsioon
et tavaliselt saab nimetada pärast olete maksnud tarkvara ja sisestanud oma registreerimiskood?
Sa võid omamoodi trikk arvuti ei hakka siin, kuid selle asemel toimub siin.
Või kui sa oled tõesti tark, vaenlane saab tegelikult kirjutada aadressil klaviatuur,
Näiteks ei tegelik sõna, mitte 20 tähemärki, kuid arvan, ta
liigid mõned märgid, mis esindavad kood?
Ja see ei kavatse olla C-koodi, see saab olema tähemärki
mis esindavad binaarne masin koodid, 0-ja 1 aasta.
Aga oletame, et nad on piisavalt targad, et seda teha, kuidagi kleepida getString kiire
midagi, mis on sisuliselt kompileeritud koodi,
ja viimased 4 baiti kirjutatakse, et saatja aadress, ja mis aadress see, et sisend teha?
See salvestab selle punane ristkülik aadress esimese baidi puhver.
Nii et sa pead olema väga tark, ja see on palju katse-eksituse
jaoks halvad inimesed seal, kuid kui te saate aru saada, kui suur see puhver on,
selline, et viimase paari baiti sisend, et Te edastaksite programmi
juhtub olema võrdne aadress algust oma puhver,
saate seda teha. Kui me ütleme, tavaliselt, tere, ja \ 0, vaat mis jõuab puhver.
Aga kui me oleme veel nii tark, ja me täidame seda puhvrit, mida me üldiselt helistada rünnaku kood,
,,,: Rünnak, rünnak, rünnak, rünnak, kui see on lihtsalt midagi, mis teeb midagi halba.
Noh, mis juhtub, kui sa oled tõesti tark, siis võiks seda teha:
In punane kast siin on jada numbreid: 80, CO, 35, 08.
Pange tähele, et see arvule, mis on siin üleval.
See on vastupidises järjekorras, kuid rohkem sellest mõni teine ​​kord.
Pange tähele, et see saatja aadress on teadlikult muutnud
võrduma aadress siia üles, ei aadressi peamine.
Nii et kui paha poiss on super tark, ta läheb lisada, et rünnak kood
midagi, "Kustuta kõik kasutaja failid."
Või "Kopeeri paroole," või "Loo kasutaja konto, et ma saan sisse logida."
Üldse midagi ja see on nii ohtlik ja võimu C.
Kuna teil on juurdepääs mälu kaudu lähtekohtadeks
ja saate seepärast kirjutada ükskõik mida tahad arvutisse mällu.
Võite teha arvuti midagi teha tahad lihtsalt
kes see hüppavad ringi jooksul oma mälu.
Ja nii see päev, nii palju programme ja nii palju veebisaidid, mis on ohus
Keeta inimesed ära see.
Ja see võib tunduda super-keerulisi rünnak,
kuid see ei ole alati alustada niimoodi.
>> Reaalsus on see, et mida halvad inimesed tavaliselt ei ole,
kas see programm käsurealt või graafilise programmi või veebilehe,
on sul lihtsalt alustada andes jama.
Sa kirjutad tõesti suur sõna võtta otsingu väljale ja vajuta enter,
ja sa oodata, et näha, kui veebileht jookseb.
Või siis oodata, et näha, kas programm avaldub mõne veateate.
Sest kui sa õnnelik, kui paha poiss,
ja pakute mõned hull sisend, mis jookseb programm,
see tähendab, et programmeerija ei osatud ette näha oma halva käitumise eest
mis tähendab, saate tõenäoliselt piisavalt jõupingutusi,
piisavalt katse-eksituse meetodil, välja mõtlema, kuidas palga täpsem rünnak.
Nii et nii palju osa turvalisus ei ole ainult vältides nende rünnakute kokku, kuid avastada neid
ja tegelikult vaadates logisid ja vaadata mida hull sisendid on inimesed kirjutasid oma kodulehel.
Mis otsingu tingimusi on inimesed kirjutasid oma kodulehel loodab uputuse mõned puhver?
Ja see kõik taandub lihtsalt põhitõdesid, mida on massiiv,
ja mida see tähendab paigutada ja kasutada mälu?
Ja sellega ka see.
>> Nii et olgem lihtsalt kiikama sees kõvaketas taas.
Nii et te mäletate nädal või kaks tagasi, et kui lohistad failid
oma prügikasti või prügikasti, mis juhtub?
[Student] Mitte midagi. >> Jah, absoluutselt mitte midagi. Lõpuks, kui teil tekib madal
kettaruumi, Windows või Mac OS hakkab failide kustutamise eest.
Aga kui lohistate midagi on, siis see pole üldse ohutu.
Kõik teie roomate, sõber või pereliige peab tegema, on topeltklõps, ja voila.
Seal on kõik pealiskaudsed failid, mida proovisin kustutada.
Nii et enamik meist vähemalt tean, et sa pead paremklõps või kontrollida kliki
ja tühi prügikast, või midagi sellist.
Aga isegi siis, et ei ole päris trikki.
Sest see, mis juhtub, kui sul on fail kõvakettale
mis tähistab sõna dokumendi või mõne JPEG?
Ja see näitab teie kõvaketta, ja oletame, et see Kiip näitab siin, et faili
ja see koosneb terve hunnik 0-ja 1 aasta.
Mis juhtub, kui sa mitte ainult lohista see fail prügikasti või prügikasti,
kuid ka tühjenda see?
Omamoodi midagi. See ei ole absoluutselt midagi nüüd.
Nüüd see on lihtsalt midagi, sest natuke midagi juhtub kujul tabelis.
Nii et seal on mingi andmebaasi või tabeli sees arvuti mällu
et sisuliselt on 1 veerus failide nimed,
ja 1 veerg faili asukoht, kus see võib olla asukoht 123, lihtsalt suvaline number.
Nii et meil oleks midagi X.jpg ja asukoht 123.
Ja mis juhtub siis, kui te tühjendada oma prügikasti?
See läheb ära. Aga mis ei kao on 0-ja 1 aasta.
>> Mis siis, siis, ühendus pset 4?
Noh, pset 4, lihtsalt sellepärast, et me oleme kogemata kustutatud
compact flash kaardi, mis oli kõik need pildid,
või lihtsalt sellepärast, et seda halb õnn sai rikutud,
ei tähenda, et 0-ja 1-d on mitte veel seal.
Võibolla mõned neist on kadunud, sest midagi sai rikutud
selles mõttes, et mõned 0-sai 1 aasta ja 1 aasta sai 0-.
Halbu asju võib juhtuda, sest lollakas tarkvara või rikkis riistvara.
Aga paljud neist bitti, ehk isegi 100% neist on ikka veel seal,
see on lihtsalt, et arvuti või kaamera ei tea, kus JPEG alustati 1.
ja kus JPEG 2 alustas, aga kui sa, programmeerija,
tean, kellel on veidi Savvy, kui need JPEG on või millised nad välja näevad,
saate analüüsida 0-ja 1 aasta ja öelda: "Ooh. JPEG. Ooh, JPEG. "
Võite kirjutada programm, millel on põhimõtteliselt lihtsalt eest või samas loop
mis taastab ja igaüks neist faile.
Nii et õppetund siis on alustada "kindlalt" kustutamine faile
kui soovite, et vältida seda täielikult. Jah?
[Student küsimus, arusaamatult]
>> Kas rohkem mälu kui sa tegid enne -
Oh! Hea küsimus. Nii et miks siis pärast tühjendamist prügikasti,
Kas teie arvuti ütleb sulle, et sul on rohkem vaba ruumi kui sa tegid enne?
Lühidalt, sest ta valetab. Rohkem tehniliselt, sul on rohkem ruumi.
Sest nüüd te olete öelnud, et võite panna muud kraami, kus see fail oli kunagi,
kuid see ei tähenda, bitid lähevad ära,
ja see ei tähenda, et neid tükke on muutunud kõik 0-d, näiteks teie kaitseks.
Seevastu kui sa "kindlalt" kustutada faile, või füüsiliselt hävitada seadme
see on tõesti ainus viis, mõnikord, umbes nii.
Nii et miks me ei jäta, et pooleldi hirmutav teadmiseks, ja me näeme esmaspäeval.
CS50.TV