[Powered by Google Translate] [TEDEN 5]
[David J. Malan, Harvard University]
[To je CS50.] [CS50.TV]
[Ženska] Laže, kaj, ne vem.
[Man] Torej, kaj vemo?
[Ženska] To je 09:15, Ray Santoya je bil na bankomatu.
[Man] Torej, vprašanje je, kaj je počel na 9:16?
[Ženska] Streljanje 9 mm v nečem.
Mogoče je videl ostrostrelca.
[Man] Ali bi delal z njim.
[Ženska] Čakaj. Pojdi nazaj 1.
[Man] Kaj vidiš?
[♫ ♫ napeto glasba]
[Ženska] Prinesite svoj obraz navzgor. Celoten zaslon.
[Man] Njegova očala. >> Tam je odsev.
[♫ ♫ napeto glasba]
[Man] To je Nuevita za baseball moštva. To je njihov logo.
[Ženska] In on govori, da kdor je nosil to jakno.
>> [David Malan] Torej, to je CS50 teden 5, in danes smo uničiti malo televizijo in film za vas.
Torej, ko gledaš predstavo, kot je ta v tej zadevi,
in policisti pravijo, "Ali lahko očistite, da se dogaja?" ali "Okrepiti"
ni okrepila v realnem svetu.
V bistvu, kaj si res dobil je le malo kaj takega.
Sem potegnil eno izmed zaposlenih fotografij iz strani.
To je program, imenovan Photoshop. To je 1 od 2 Bowdens,
1 od 3 Bowdens dejansko, danes, saj imamo gospo Bowden tudi tukaj, z Rob in Pavla.
Ampak tukaj je Rob na zaslonu, in če bomo povečaj o tem sijočimi on je vedno imel v svojem očesu,
kaj je dejansko videti je, da tisto, kar vidite, kaj dobiš.
To je "okrepljen", tako da "CSI" so se malo narobe.
Še en posnetek, če smo izbrali za "CSI" malce dlje.
Ta je lep stavek, da odslej izreči, če želite
dobro tehnično s prijatelji, ko je res, da si rekel ničesar.
>> [Man] Že več tednov sem bil preiskuje umore Taksist Killer
z določeno fascinacijo morbid.
[Woman # 1] To je v realnem času.
[Woman # 2], bom ustvariti grafični vmesnik z uporabo Visual Basic, vidim, če lahko sledim IP naslov.
>> [Malan] Torej zvok ni bil sinhroniziran v prahi, ki ustvarja grafični vmesnik z uporabo Visual Basic
izslediti IP naslov je popoln nesmisel.
Te dni ga ne bi uporabljali Visual Basic,
ni potrebe za GUI in IP-naslov je bil tehnično natančen izraz.
Torej, bodite pozorni na to, ena izmed mojih najljubših:
Ta je malo bolj skrivnostno, ker morate vedeti, drugačen jezik.
Tam je jezik imenuje Objective-C, ki je nadgradnja C.
Kar pomeni, da je C plus nekaj dodatnih funkcij, med njimi objektno programiranje.
In to je jezik, ki ga je Apple iOS populariziral za programiranje.
In tukaj je posnetek iz drugega predstavo v celoti, iz "Numbers"
da če dejansko pogledate pozorno na TiVo in premor v pravem trenutku,
boste videli, da to, kar gledamo ni ravno tisto, kar je opisano.
In mi poskušali drug zvočni priključek tukaj in videli, če ne moremo
da zvoka v sinhronizirani tokrat.
Dam ti "številke".
>> [Man # 1] To je 32-bitni IPv4 naslov.
[Man # 2] IP, to je internet. >> Zasebno omrežje. To je zasebno omrežje je Anita.
[Malan] Ok. To je Objective-C, in to je za barvanje nekega otroški program,
kot si lahko morda sklepali iz imena spremenljivke tam.
Tako da, potem je "številke". Torej, danes in ta teden bomo predstavili
Malo svetu forenzike in konteksta, v težave, zato.
Danes bo skrajšano predavanje zato, ker je poseben dogodek tukaj
kasneje, tako da bomo pokukajmo in draži tako študentom kot tudi njihovi starši danes
z nekaterimi stvarmi, ki so na obzorju.
Med njimi, kot v ponedeljek, boste imeli še nekaj sošolci.
EDX, Harvard in MITs novo spletno pobuda za odprto učno
in še več, je začela na univerzi Harvard v ponedeljek.
Kar pomeni, da pride ponedeljek boste imeli - kot v zadnjem štetju
86.000 dodatnih sošolci bodo po skupaj s predavanji CS50 je
in oddelki in walkthroughs in problemov sklopov.
In v okviru tega, boste postali člani ustanovni razred
CS50 in zdaj CS50x.
>> Kot del tega zdaj zavedajo, da se bodo nekatere upsides kot dobro.
Pri pripravah na to, za veliko število študentov,
zadošča reči, da čeprav imamo 108 TFS in CAS,
ni ravno najboljši študent / učitelja razmerje, ko bomo zadeli 80.000 druge študente.
Torej mi ne bo treba razvrščanje toliko problem postavlja ročno.
Tako je predstavil ta teden v problemski sklop bo CS50 Preverite,
, ki se bo ukazne vrstice v aparatu
da boste dobili, ko jo boste osvežili kasneje ta teden,
in boste lahko, da zaženete ukaz, preverite, 50,
na svoj pset, in boste dobili nekaj povratnih informacij o tem, ali je vaš program
pravilna ali nepravilna glede na različne tehnične zahteve za obliko, ki smo jih navedli.
Torej, več o tem in specifikacija problem niz in
se CS50x sošolci bodo uporabili tudi to.
>> Torej, problem sklop 4 je vse o forenziki.
In je bil ta del se zgleduje po nekaj resničnih stvari,
pri čemer, ko sem bil v šoli, sem za nekaj časa interniran v
Uradu Middlesex County District pravobranilstvo delaš forenzično delo
z njihovo vodilno forenzično raziskovalca, in kaj je ta znašala
je, mislim, da sem že pred nekaj teden preteklost, je masa državne policije ali drugih
bi prišel, bi odložiš stvari, kot so trdi diski in CD-jev in disket
in podobno, nato pa je cilj urada forenzike je bil ugotoviti, ali
ni bilo ali ni bilo dokazov, neke vrste.
To je bila posebna enota Preiskave, tako da je bilo beli ovratnik kriminalu,
je bilo bolj zaskrbljujoče vrste kaznivih dejanj,
kaj vključuje neke vrste digitalnih medijev, se izkaže, da ne, da je veliko ljudi
napisati e-poštno sporočilo "Uspelo mi je."
Tako pogosto ti forenziko iskanja ni obrnila navzgor vse, da je veliko sadja,
ampak včasih bi ljudje pišejo take e-pošte.
Torej, včasih je bila nagrajena za prizadevanja.
>> Vendar pa vodi do tega forenzično pset, bomo uvedbo v pset 4 bit grafike.
Torej, ste verjetno, da te stvari za samoumevne, JPEG, GIF in podobno, v teh dneh,
ampak če si res misliš o tem, slika, podobno kot obraz Rob je,
lahko obravnavamo kot zaporedje pik ali pik.
Zdaj, v primeru obrazu Rob je, tam je vse vrste barv,
in smo začeli videti posamezne pike, otherwide znane kot pik,
ko smo začeli, da povečate palca
Ampak, če bomo poenostavili svet malo in samo rečem, da je to tukaj, je Rob
črno-belo, no, da predstavlja črno-belo moreva uporabiti binarno.
In če bomo uporabiti binarno, 1 ali 0, lahko izrazimo to isto sliko
nasmejane obraza Rob je s tem vzorcu bitov: 11000011 predstavlja
bela, bela, črna, črna, črna, črna, bela bela.
In tako to ni velik korak, nato pa začeti govoriti o barvite fotografije.
Stvari, ki bi jih vidite na Facebooku ali pa z digitalnim fotoaparatom,
ampak, seveda, ko gre za barve, za ogled potrebujete več bitov.
In zelo pogosto v svetu fotografije je uporaba ne 1-bitne barve
kot to kaže, pa 24-bitno barvno, če ste dejansko dobili milijone barv.
Tako kot v primeru, ko povečujete na očeh Rob je,
da bi bila katera številka milijonov različnih barvnih možnosti.
>> Torej bomo uvesti to vrsto problema 4 kot tudi v walkthrough,
, ki bo danes ob 3:30 namesto običajnega 2:30 zaradi petkovega predavanja tukaj.
Vendar pa bo video na spletu, kot običajno, jutri.
Prav tako vam bomo predstavili drugi obliki zapisa.
Torej to pomeni, da si namenoma zastrašujoče na prvi,
ampak to je le nekaj dokumentacije za struct C.
Izkazalo se je, da je Microsoft pred leti, pomagal popularizirati ta format,
imenuje bitna format, BMP, in to je super-enostaven,
barvna grafična oblika datoteke, ki je bila uporabljena za dalj časa
in včasih še za ozadja na namiznih računalnikov.
Če menite, da nazaj na Windows XP in gričev in modro nebo,
da je običajno BMP ali bitna slika in bitne slike
so zabava za nas, saj imajo malo več kompleksnosti.
To ni tako preprosto, kot to mrežo 0 in 1 je;
Namesto, da imate stvari, kot glavo na začetku datoteke.
Torej, z drugimi besedami, znotraj datoteke. BMP je cel kup 0 in 1 je,
vendar pa je nekaj dodatnega 0 in 1 je tam.
In izkazalo se je, da tisto, kar smo verjetno samoumevno let,
datotek, kot so. doc. ali xls ali. mp3 ali mp4,.
ne glede na formati, da ste seznanjeni s.
No, kaj to sploh pomeni, da je format?
Ker na koncu dneva vse te datoteke, ki jih uporabljamo so samo 0 in 1 je
in morda tisti 0 in 1 je predstavljati, b, c, z ASCII ali podobno,
toda do konca dneva, saj je samo 0 in 1 je.
>> Torej, ljudje le občasno odloči, da izumiti novo obliko datoteke
kjer so standardizacija, kaj se bo vzorce bitov pravzaprav pomeni.
In v tem primeru tudi tu ljudje, ki so namenjeni bitno obliko datoteke
je dejal, da je že na prvi bajt v datoteke bitnih, kot je označena z odmikom 0, tam,
tam bo še nekaj cryptically imenom spremenljivke se imenuje bfType,
ki samo stoji za vrsto datoteke bitne slike, kakšne datoteke bitnih je to.
Lahko sklepamo, morda v drugi vrstici, ki izravna 2, bajt številko 2,
ima vzorec 0 in 1, ki predstavlja kaj je?
Velikost nečesa, in gre od tam.
Torej, v kompletu 4 problema, boste šli skozi nekatere od teh stvari.
>> Mi ne bo končalo skrbeti za vse od njih, vendar pa opazite, da se začne, da bi dobili zanimive
okoli vrstice ali bajt 54, rgbtBlue, zelena in rdeča.
Če ste kdaj slišali kratico RGB, rdeča zelena modra, to je sklic na to.
Ker se je izkazalo, lahko slikate vse barve mavrice
z nekaterimi kombinacijo rdeče in modre in zelene.
In v resnici, lahko starši v sobi spomniti na nekatere izmed prvih projektorjev.
Te dni, boste videli 1 Močna svetloba prihaja iz leče.
Ampak nazaj v dan, si imel rdečo lečo, modro lečo in zeleno lečo
in skupaj so usmerjene na zaslonu in oblikovali barvito sliko.
In zelo pogosto bi srednje šole in srednje šole so tiste leče
vedno tako rahlo Nakrivo, tako da si nekako vidi dvojno ali trojno slike,
ampak da je bila ideja. Imeli ste rdečo in zeleno in modro svetlobo, slikarstvo sliko.
In ta ista načela se uporabljajo v računalnikih.
>> Tako med drugim izzivom, potem za vas problem nastaviti 4
se bo nekaj stvari, ena je, da dejansko velikost slike.
Da bi se v vzorec 0 in 1 je,
ugotovimo, katere kose 0 in 1 je predstavljati, kaj v strukturi, kot je ta,
in nato ugotovimo, kako se podvajajo pikslov: rdeče, blues, zelenice
notranjost tako, da ko slika izgleda takole najprej bi lahko izgledal tako namesto po tem.
Med drugimi izzivi, preveč, se bo, da bomo predali vam
Forenzični slika dejanskega datoteke iz digitalnega fotoaparata
in na to kamero, nekoč, je bilo cel kup fotografij.
Problem je, da smo pomotoma izbrisali ali pa je slika poškodovana nekako.
Slabe stvari se dogajajo pri digitalnih fotoaparatih, in tako smo se hitro kopirajo vse 0 in 1 je
off to kartico za vas, shrani vse v 1 veliko datoteko, nato pa jih bomo predali za vas
pri reševanju iz 4, tako da lahko napisati program v C, s katerimi si opomore
vse te JPEGs, v najboljšem primeru.
In izkazalo se je, da so JPEG, čeprav je to precej kompleksne oblike zapisa datoteke,
oni so veliko bolj zapleten kot to nasmejan obraz tukaj.
Izkazalo se je, da ima vsak JPEG začne z istimi vzorci 0 in 1 je.
Torej z uporabo while zanko ali za zanke in podobno,
lahko izbirate v vseh 0 in 1 je v tem forenzične slike
in vsakič, ko vidiš poseben vzorec, ki je opredeljen v specifikaciji je problem podloga,
lahko prevzame, "Oh, tukaj je zelo velika verjetnost,
začetek JPEG, "in takoj, ko je bil isti vzorec,
nekaj več bajtov ali kilobajtih ali megabajtih kasneje,
lahko prevzame, "Oh! Tukaj je 2. JPEG, fotografije sem po prvi.
Naj nehate brati, da je prvo datoteko, da začnete pisati to novo. "
In izhod vašega programa za pset 4 se bo kar 50 JPEG.
In če to ni 50 JPEG, imate malo zanko.
Če imate nešteto JPEG, imate neskončno zanko.
Tako, da bo tudi precej značilen primer.
To je tisto, kar je na obzorju.
>> Kviz 0, za nami. Zavedaj se, na moj email, da vedno obstaja ljudje
ki so tako srečni, nekako nevtralen, in žalosten okoli 0 kvizu čas.
In vas prosimo, da stik z mano, glave TFS, Zamyla, svoje TF
ali eden od CA, da boste vedeli, če bi želeli, da bi razpravljali, kako je šlo.
>> Torej, da bi naredil vtis na starše tu v sobi,
kaj je CS50 knjižnica? Dobro delo.
Kaj CS50 knjižnica? Ja? [Študentski odgovori, nerazumljiv]
>> Dobro, dobro. Torej je prewritten niz kode, ki smo zaposleni, je zapisal,
nudimo vam, da zagotovi nekaj skupnih funkcij.
Stvari, kot se mi je niz, se mi je int, vse funkcije, ki so tukaj naštete.
Že sedaj smo začeli res, da te usposabljanje kolesa off.
Torej bomo začeli odvzamejo "niz" od tebe,
ki odpoklic, je le sinonim za tisto, kar dejansko podatkovni tip? char *.
Tako za starše, da je bil verjetno -, da je dobro, tako da bom char * začnemo videti
Na zaslonu toliko, kot smo odstranili "niz" iz našega besednjaka,
vsaj ko gre za dejansko pisanje kode.
Prav tako bomo prenehali uporabljati nekatere od teh funkcij toliko,
ker naši programi bodo dobili bolj zapletene
ne samo pisati programe, ki sedijo tam s hitro utripa,
čaka, da uporabnik vnesti nekaj palcev
Dobili boste svoje vložke od drugod.
Na primer, jih boste dobili od več bitov na lokalni trdi disk.
Boste namesto njih priti v prihodnosti od omrežne povezave, nekatere spletne strani nekje.
Torej lupine nazaj te plasti prvič, in izvlecite CS50 naprave
in ta datoteka imenuje CS50.h, ki ste bili ostri tudi več tednov.
>> Ampak kaj je dejansko videti, kaj je notri tega.
Torej začetek datoteke v modrem je samo cel kup pripomb,
informacije o garanciji in izdajanja dovoljenj. To je neke vrste skupne paradigme
programske opreme, saj je veliko programske opreme v teh dneh, je tisto, kar se imenuje "open source"
kar pomeni, da je nekdo napisal kodo
in se je prosto dostopen, ne samo za vožnjo in uporabo,
ampak dejansko bere in spreminja in vključiti v svoje delo.
Torej, to je tisto, kar ste bili z uporabo, odprtokodno programsko opremo,
čeprav v zelo majhnem obliki.
Če bi se pomaknite navzdol mimo pripomb, čeprav bomo začeli videti nekaj bolj znanih stvari.
Tako obvestilo na vrhu tukaj, da datoteka vsebuje CS50.h cel kup glavi datoteke.
Zdaj, večina od njih še nismo videli prej, vendar je
znano, katera od teh smo videli, čeprav na kratko, tako daleč?
Ja, standardne knjižnice. Stdlib.h je malloc,
tako da, ko smo začeli govoriti o dinamično dodeljevanje pomnilnika,
ki jih bomo vrnili naslednji teden pa smo začeli tudi te datoteke.
Izkazalo se je, da je bool in resnično in lažno dejansko ne obstajajo v C, per se,
razen če so te datoteke tukaj.
Tako smo več tednov, je bil tudi standardni bool.h
tako da lahko uporabite pojem bool, resnična ali neresnična.
Brez tega bi morali nekako ponaredek, in uporabite int
in samo samovoljno domnevati, da je 0 false in 1 je res.
>> Zdaj, če se pomaknite naprej, tu je naša opredelitev niza.
Izkazalo se je, kot smo že povedal, da če je ta * je sploh ni važno.
Lahko celo prostor vsem.
Mi, ta semester, so bili njeni promociji, kot je to razvidno, da je * ima opraviti s tipom.
Toda zavedati, tako kot pogoste, če ne malo več skupnega, je, da ga ni
ampak funkcionalno gre za isto stvar.
Toda zdaj, če beremo določa tudi, vzemimo si rekel, GetInt,
saj smo se, da je mogoče, preden karkoli drugega v tem polletju.
In tukaj je GetInt. To je tisto?
To je prototip. Tako pogosto, smo pripravili prototipe na vrhovih naših. C datoteke
lahko pa tudi postaviti prototip v glavi datoteke. h datoteke,
kot je ta v tej zadevi, tako da, ko pišete nekaterih funkcij
, ki jo želite, da drugi ljudje lahko uporabljali, kar je točno zgodilo pri CS50 knjižnici
ne samo izvaja svoje naloge v nekaj podobnega CS50.c,
si prav tako prototipe ni na vrhu te datoteke, vendar na vrhu glave datoteke
torej, da glava datoteke je tisto, kar so prijatelji in sodelavci,
z ostrimi tudi v svoji kodi.
Torej vsem tem času ste bili tudi vsi ti prototipov
dejansko na vrhu datoteke, ampak s pomočjo tega mehanizma so ostri
da v bistvu kopije in paste za to datoteko na svoje.
No, tukaj je nekaj precej podrobno dokumentacijo.
>> Smo precej samoumevno, da GetInt dobi int,
vendar se izkaže, da je nekaj primerov kotiček, kajne?
Kaj pa, če uporabnik vnese v številu, ki je tako prevelika?
Quintillion, da preprosto ni dovolj prostora v notranjosti notr?
Kakšna je pričakovana vedenja? No, idealno pa je, da je predvidljiv.
Torej, v tem primeru, če ste dejansko prebrali drobni tisk,
boste videli, da če proga ne more prebrati, ta vrne INT_MAX.
Nikoli nisva govorila o tem, ampak glede na njeno kapitalizacijo,
kaj je to, verjetno?
To je stalna, tako da je nekaj posebnega konstanta, ki je verjetno razglašena
V eni od teh glavi datoteke, ki je višje v spisu,
INT_MAX in je verjetno nekaj podobnega, v grobem, 2000000000.
Ideja je, da zato, ker moramo nekako pomenilo, da je nekaj šlo narobe,
smo, da imajo 4000000000 številke so nam na voljo,
Negativni 2000000000 na do 2 milijard EUR, več ali manj.
No, tisto, kar je pogosto pri načrtovanju je, da kradejo samo eno od teh številk.
Morda 0, morda 2 milijardi morda negativno 2000000000.
Torej, ste porabili eno od svojih možnih vrednosti, tako da lahko zavežejo na svetu
da če gre kaj narobe, se bom vrnil to super-veliko vrednost.
Ampak vi ne želite, da si tipkanje nekaj Grobni, kot je "2, 3, 4 ..."
za res veliko več, če boste namesto tega posplošiti kot stalnica.
Torej res, če si bil analni v zadnjih nekaj tednih,
kadarkoli pokličeš GetInt, morate bili preverjanje z if stanju.
Ali si tip v INT_MAX, ali natančneje,
vam GetInt zameno INT_MAX? Ker če je to storil,
ki dejansko pomeni, da ni treba vnesti, kaj je šlo narobe v tej zadevi.
Torej, to je tisto, kar je splošno znano kot "divjega" vrednost, kar pomeni samo nekaj posebnega.
>> No, da preidem na s. Datoteke c.
Datoteka C, obstaja na napravi za nekaj časa,
in v resnici, aparat je naložen za vas
v to stvar, ki jo imenuje "objektni kodi"
ampak to šele ni pomembno za vas, če je to zato, ker sistem ne ve,
v tem primeru, kje je naprava.
No, pa se pomaknite navzdol do zdaj GetInt, in videli, kako GetInt je delal ves ta čas.
Torej, tukaj imamo podobne pripombe od prej.
Naj približati le tisti del kode,
in kaj imamo za GetInt je naslednja.
To traja nobenega vnosa in se vrne int, medtem ko je (pravi), tako da imamo namerno neskončno zanko
ampak, verjetno bomo iztrgajo iz tega nekako, ali pa se vrnite od znotraj tega.
Torej, poglejmo, kako to deluje. No, zdi se, da z uporabo GetString
V tej prvi vrstici znotraj zanke 166.
To je zdaj dobra praksa, saj v kakšnih okoliščinah
GetString lahko vrne to posebno, ključne besede, NULL?
Če gre kaj narobe. Kaj bi lahko šlo narobe, ko pokličete nekaj podobnega GetString?
Ja? [Student odgovor, nerazumljiv] >> Ja. Mogoče malloc ne uspe.
Nekje pod pokrovom motorja GetString kliče malloc,
ki dodeljuje pomnilnik, kar omogoča, da računalniška trgovina
vse znake, da uporabnik vnese v tipkovnici.
In predvidevam si imel še celo veliko prostega časa
in vnesli več, na primer kot 2 milijardi znakov.
Več znakov, kot računalnik pa ima tudi RAM.
No, GetString je, da bi lahko pomenilo, da za vas,
tudi če je to super, super občasni kotiček primer.
To je na nek način bi lahko poskrbel za to, in tako GetString,
če gremo nazaj in preberite dokumentacijo, se v resnici vrnil NULL.
Zdaj, če ne GetString z vrnitvijo NULL, GetInt bo ne
z vrnitvijo INT_MAX, tako kot kontrolna.
To so samo človeške konvencije. Edini način, da bi vedel, da je to primer
je z branjem dokumentacije.
Torej se pomaknite navzdol, kjer int dejansko GotInt.
>> Torej, če sem se pomaknite navzdol malo naprej, v skladu 170 imamo komentar nad temi smernicami.
Tako izjavljamo, v 172, int n in char c, in potem to novo funkcijo
ki so se nekateri izmed vas naletel že prej, vendar sscanf.
To je kratica za godalni f skeniranja.
Z drugimi besedami, daj mi niz in ga bom za skeniranje informacijami interesov.
Torej, kaj to pomeni? No, recimo, da sem tip v dobesedno 1 2 3 na tipkovnici,
in nato pritisnite enter. Kaj je podatkovni tip 1 2 3 kdaj vrnila GetString?
Očitno niz, kajne? Imam niz, tako da 1 2 3 res »1 2 3"
s \ 0 na koncu. To ni int.
To ni več. Izgleda kot nekaj, vendar to ni dejansko.
Torej, kaj GetInt narediti? Treba je pregledati, da se niz leve proti desni,
1 2 3 \ 0 in nekako spremeniti to dejansko celo število.
Zdaj lahko ugotovimo, kako to storiti.
Če menite, da nazaj na pset 2, boste verjetno malo udobno
s Cezarjem ali vigenere, tako da lahko izbirate v niz,
lahko pretvorite znakov, da ints s kramp. To je cel kup dela.
Zakaj ne pokličete funkcijo kot sscanf, da stori za vas?
Torej sscanf pričakuje argument v tem primeru se imenuje vrstica, ki je niz.
Nato določi, v narekovajih, zelo podoben printf,
Kaj pričakujete, da boste videli v tem nizu?
Kaj sem tukaj povedati, pričakujem, da decimalno številko in morda tudi značaj.
In bomo videli, zakaj je temu tako, v trenutku.
Izkazalo se je, da je ta zapis je zdaj spominja stvari
smo začeli govoriti o nekaj več kot tednom dni.
>> Kaj je & n & c in delaš za nas? [Študentski odgovori, nerazumljiv]
>> Ja. To mi dali naslov in naslov n c.
Zakaj je to pomembno? No, saj veš, da je s funkcijami v C
lahko vedno vrne vrednost ali nobene vrednosti.
Lahko vrne int, niz, float, char, karkoli.
Ali se lahko vrnete praznino, vendar pa lahko vrnejo le 1 stvar maksimalno.
Ampak tukaj želimo sscanf, da me vrnejo morda int, decimalno številko,
in tudi char, in bom razložiti, zakaj zna v trenutku.
Torej si dejansko želijo, da se vrnete f 2 stvari, ki preprosto ni mogoče v C.
Torej si lahko izognete, da s posredovanjem v 2 naslovi,
ker takoj, ko se z roko v odvisnosti 2 naslove, kaj lahko to funkcijo naredili z njimi?
Lahko pišete na te naslove. Lahko uporabite * delovanje in "tja" za vsakega od teh naslovov.
To je neke vrste tega backdoor mehanizma, vendar je zelo pogosta za spreminjanje vrednosti spremenljivk
v več kot samo 1 mesto, v tem primeru 2.
No, opazil sem iskal == do1, in nato vrne n če to ne v resnici, ocenjuje, da res.
Torej, kaj se dogaja? No, tehnično, vse resnično želimo, da se zgodi v GetInt je to.
Želimo, da razčleniti, če se tako izrazim, želimo prebrati niz
"1 2 3", in, če je videti, kot da je številka tam,
kaj govoriš sscanf storiti, je dal to številko, 1 2 3, v tem spremenljivko n zame.
Zakaj potem vam moram, da je to dobro?
Kakšna je vloga tudi rekel, sscanf, lahko dobite tudi znak tukaj.
[Student povedano, nerazumljiv] >> Ne - decimalna vejica lahko delo.
Naj presodilo, da je za trenutek pomislil. Kaj še?
[Študent, nerazumljiv] >> Torej, dobra misel, bi lahko postal NULL značaja.
Pravzaprav ni v tem primeru. Ja? [Študent, nerazumljiv]
>> >> ASCII. Ali mi posploševati še dlje.
Znak% c je samo za napake preverjanje.
Ne želimo, da bi znak za številko,
ampak kaj mi to omogoča, da storiti, je naslednje:
Izkazalo se je, da sscanf, poleg shranjevanje vrednosti v n in C, v tem primeru tukaj,
kar je prav tako je vrne število spremenljivk je dal noter vrednosti
Torej, če ste le vtipkati 1 2 3, potem pa samo% d bo tekmo
in šele gets n shranjen v vrednosti podobnega 1 2 3 in nič ne dobi dal na c;
c ostaja smeti vrednost, če se tako izrazim.
Garbage zato, ker nikoli ni bil inicializiran kot neko vrednost.
Torej, v tem primeru sscanf vrne 1, ker sem poseljena enega od teh kazalcev,
v tem primeru je super. Imam int, zato sem se sprostiti linijo sprostiti pomnilnik
da GetString dejansko dodeljena, in potem se vrnem n.
V nasprotnem primeru, če ste se kdaj spraševali, če ta izjava Ponovno prihaja, prihaja od tukaj.
Če pa, nasprotno, sem vnesite 1 2 3 foo,
Samo nekaj naključno zaporedje besedila, sscanf bo videti,
Ooh, število, ooh, število, ooh, število, ooh - f.
In to se dogaja, da je dal 1 2 3 leta n.
To bo dal fv c, in se nato vrne 2.
Torej imamo, samo z osnovno definicijo vedenja scanf je,
zelo preprost način - no, na prvi pogled zapleteno, ampak na koncu dneva,
dokaj preprost mehanizem rekel, da je int, in če je tako, je to edina stvar, ki sem našel?
In prazen prostor tukaj je namerno. Če ste prebrali dokumentacijo za sscanf,
vam pove, da če so kos belega prostora na začetku ali na koncu,
sscanf bo tudi omogočila uporabniku, iz katerega koli razloga, da hit preslednico 1 2 3, in da bo zakonito.
To ne bo nadrl uporabnika samo zato, ker so hit preslednico na začetku ali na koncu,
ki je samo malo bolj uporabniku prijazen.
>> Vsa vprašanja, nato pa GetInts? Ja?
[Student vprašanje, nerazumljiv]
>> Dobro vprašanje. Kaj pa, če si jo vnesli v char, kot f in pritisnite tipko Enter
ne da bi kdaj tipkanje 1 2 3; kaj misliš vedenje te vrstice kode bi se potem lahko?
Tako lahko sscanf zajema tudi to, ker v tem primeru,
to ne bo zapolniti n ali c, da se bo namesto tega vrne 0.
V tem primeru sem tudi, da lov scenarij, ker je pričakovana vrednost je 1 želim.
Želim samo 1, in samo 1 stvar je treba zapolniti. Dobro vprašanje. Drugo?
>> V redu, zato naj se ne gredo skozi vse funkcije v tukaj,
ampak tisti, ki se zdi, da je morda preostale obresti
je GetString, ker se je izkazalo, da GetFloat, GetInt,
GetDouble, GetLongLong vseh punt veliko funkcionalnosti za GetString.
Torej si oglejte, kako se je izvajal tukaj.
Tole izgleda malo zapleteni, vendar se uporablja enake osnove
da smo začeli govoriti o zadnjem tednu. Torej, v GetString,
ki ne prevzema nobene trditve, kot na praznino sem gor,
in vrne niz, tako da sem o razglasitvi niz imenovano buffer.
Res ne vem, kaj se dogaja, da se uporabljajo za še, ampak bomo videli.
Izgleda zmogljivosti je privzeto, 0, niso povsem prepričani, kam to pelje.
Ne vem, kaj se dogaja n, ki se uporabljajo za še.
Ampak zdaj je že malo bolj zanimivo, da je v skladu 243,
izjavljamo z int c, to je neke vrste neumna podrobnosti.
Char je 8 bitov, 8 bitov lahko shranite, koliko različnih vrednosti?
256. Problem je, če hočeš imeti 256 različnih znakov ASCII,
ki so, če menite, nazaj, in to ni nekaj, kar na pamet.
Ampak, če mislite, da nazaj v ta velik ASCII tabeli smo imeli pred tedni,
je bilo v tem primeru, 128 ali 256 ASCII znakov.
Uporabili smo vse vzorce 0 in 1 se dogaja.
To je problem, če želite, da bi bili sposobni odkriti napako.
Ker če že uporabljate za vaše vrednosti 256 znakov
nisi zares načrtovati vnaprej, ker imate zdaj nikakor ne pravim,
"To ni zakonit znakov, to pa je nekaj napačno sporočilo."
Torej, kaj počne, je svet, ki jih uporabljajo drugi največji vrednosti,
nekaj podobnega notr, tako da boste imeli noro število bitov,
32 za 4000000000 možnih vrednosti, tako da lahko preprosto na koncu z uporabo,
v bistvu, 257 izmed njih, 1 od katerih ima nekaj posebnega pomena kot napako.
>> Torej, poglejmo, kako to deluje. V skladu 246, imam veliko while zanko
da kliče fgetc, f pomeni datoteko, getc, nato pa stdin.
Izkazalo se je, da je to le še bolj natančen način rekel "beri vhod s tipkovnice."
Standardni vhod pomeni, tipkovnica, standardni izhod pomeni zaslon,
in standardna napaka, ki jih bomo videli v pset 4, pomeni zaslon,
ampak poseben del zaslona, ​​tako da to ni združevali
z dejansko močjo, ki jo namerava natisniti, a več o tem v prihodnosti.
Torej fgetc pomeni le prebral en znak na tipkovnici, in jo shranite kje?
Shranite jo v C, in nato preverite, tako da sem samo z nekaj matematične veznike tukaj
preverite, da ni enako \ n, tako da je uporabnik zadeti nastopiti.
Želimo ustaviti na tej točki, konec zanke, in smo tudi želeli preveriti
Za posebno konstanten, EOF, ki je, če veš, ali ugibati - kaj to stati?
Konec datoteke. Torej, to je nekako nesmiselno, ker če sem tipkanje na tipkovnici,
pa je res ni vpleten v to sliko,
ampak to je samo nekako splošen izraz pomeni
da nič ne prihaja od prstov The Human je. EOF. Konec datoteke.
Kot prahi, če ste že kdaj udaril nadzornega d na tipkovnici,
ne da bi imeli še, da ste zadeli nadzora c.
Toda nadzor d pošlje to posebno stalno imenovano EOF.
>> Torej, zdaj imamo samo nekaj dinamično dodeljevanje pomnilnika.
Torej, če n + 1> zmogljivosti, zdaj bom razložil n.
n je samo, koliko bajtov je trenutno v varovalnem,
niz, ki ga trenutno gradnjo od uporabnika.
Če imate več znakov v vašem pufru, kot ga imajo zmogljivosti v pufru,
intuitivno, kaj moramo storiti, je, potem nameniti več zmogljivosti.
Grem prelistati čez nekaj aritmetične tukaj
in se osredotočiti samo na to funkcijo tukaj.
Veš, kaj je malloc ali vsaj splošno znano.
Ugani, kaj realloc ne. [Student odgovor, nerazumljiv]
>> Ja. In to ni povsem dodate pomnilnik, ampak prerazporeja spomin na naslednji način:
Če je še dovolj prostora ob koncu niza, da bi vam več tega pomnilnika
kot je bilo prvotno vam, potem boste dobili, da dodatnega pomnilnika.
Torej si lahko samo polaganje strune znake back to back to back to back.
Ampak, če to ne drži, saj ste čakali predolgo
in nekaj naključno dobili plopped v spomin, toda tam zunaj
spomin sem, da je v redu. Realloc bo naredil vse težko delo za vas,
premakniti niz, ki ste jih prebral v tem daleč od tukaj,
dal dol, in nato dal nekaj več vzletno-pristajalne steze na tej točki.
Torej, zamahnil z roko, naj povem, da to, kar počne GetString
se začenja z malo pomnilnika, morda 1 en znak,
in če uporabnik vnese v 2 znakov, GetString konča
realloc kliče in pravi: "Oh, 1 znak ni bilo dovolj.
Daj mi 2 znakov. " Potem, če ste prebrali logiki zanke,
to bo rekel: 'Oh, si ga vnesli v 3 znake.
Daj mi zdaj ne pa 2 4 znake, potem mi 8, potem mi 16 in 32 ".
Dejstvo, da sem podvoji zmogljivost vsakič
pomeni, da se buffer ne bo povečevala.
To se dogaja, da raste izredno hitro, in kaj bi lahko bila prednost tega?
Zakaj sem podvojitev medpomnilnik, čeprav uporabnik
Morda potrebujete le 1 dodatno znak iz tipkovnice?
[Student odgovor, nerazumljiv]. >> Kaj je to?
Točno tako. Saj ni treba, da raste tako pogosto.
In to je le neke vrste - Ti si varovanju vaše stave tukaj.
Ideja je, da ne želite, da pokličete realloc veliko, saj kaže, da je počasen.
Vsakič, ko zaprosi za operacijski sistem za spomin, saj boste kmalu videli
v prihodnjo problem, pa kaže, da traja nekaj časa.
Torej čim bolj zmanjšati tako veliko časa, tudi če ste zapravljaš nekaj prostora, kaže, da je dobra stvar.
>> Ampak, če bomo prebrali v zadnjem delu GetString tukaj
in spet, razumevanje vsakega posameznega linijo tu ni tako pomembno danes.
Toda opazil, da je na koncu poziva malloc še enkrat, in razdeli
točno tako, kot mnoge bajte, kot jo potrebuje za niz
in nato odvrže s pozivom brezplačno, pretirano velik medpomnilnik,
če je dobil celo podvojila prevečkrat.
Skratka, to je, kako GetString je delal ves ta čas.
Vse to pa je prebral en znak naenkrat spet in spet in spet
in vsakič, ko ga potrebuje dodaten pomnilnik, se sprašuje operacijski sistem, ki mu jih kliče realloc.
Kakšno vprašanje? V redu.
>> Napad. Zdaj, ko razumemo napotke ali vsaj
so vse bolj seznanjeni s kazalci,
kaj menijo, kako je cel svet začne na propad
če se ne znajdete brani pred kontradiktornem uporabnikov,
ljudje, ki poskušajo vdreti v sistem.
Ljudje, ki se trudijo za krajo programske opreme, ki jih izogiba nekaj registracijsko kodo
ki bi jih sicer morali vnesti noter
Oglejte si ta primer tukaj, ki je samo C kodo
, ki ima funkcijo glavnega na dnu, da pokliče funkcijo foo,
in kaj se gre, da foo? [Študent] en argument.
Enotni >> argument. Torej, argv [1], ki pomeni prvo besedo uporabnik natipkan
v ukazni vrstici za a.out ali kakorkoli se imenuje program.
Torej foo, na vrhu, se v char *, char * ampak je samo, kaj?
String. Nič novega tukaj, in da se niz je samovoljno imenuje bar.
V skladu s tem tukaj, char c [12], v nekakšno pol-tehnične angleščine, kaj je ta linija dela?
Array -? Znaki. Daj mi niz 12 znakov.
Torej bi temu lahko rekli buffer. To je strokovno imenujemo c, vendar varovalni pri programiranju
pomeni le kup prostora, ki ga lahko dajo nekaj stvari noter
>> Potem končno, memcpy, smo se ni uporabljal pred.
Vendar pa si verjetno lahko uganiti, kaj počne. To kopije pomnilnika.
Kaj počne? No, očitno kopira bar, vložek, v c,
vendar le do dolžine traku.
Ampak tam je napaka tukaj.
Ok, tako tehnično moramo res strlen (bar) x sizeof (char), to je pravilno.
Vendar pa v najslabšem primeru v tej zadevi, predpostavimo, da je that - tako, v redu.
Potem je tu še 2 bugs. Torej, sizeof (char), vse v redu, naredimo to malo širše.
Torej, zdaj je še napako, ki je kaj?
[Student odgovor, nerazumljiv] >> Preverite za kaj? Ok, tako da bi morali biti preverjanje
Za NULL, ker slabe stvari se dogajajo, ko kazalec NULL,
Ker boste morda na koncu dogaja tam, in ga ne bi nikoli šli na NULL
da ga Dereferenciranje z * operaterja.
Torej, to je dobro in kaj še počnemo? Logično pa je napaka tu.
[Student odgovor, nerazumljiv]
Zato preverite, če >> argc ≥ 2?
Ok, tako da je 3 napake v tem programu tukaj.
Mi ne preverja, če je uporabnik dejansko vnesli v ničemer v argv [1], dobro.
Torej, kaj je 3. napako? Ja?
[Student odgovor, nerazumljiv] >> Dobro.
Zato smo preverili en scenarij. Mi implicitno preveriti ne kopirajte več pomnilnika
kot bi presegati dolžine bara.
Torej, če je uporabnik niz vnesli, je 10 znakov,
To je rekel, "samo kopirate 10 znakov."
In to je v redu, kaj pa če si jo vnesli v besedo na poziv
kot 20 znakov besedo, to je, ki pravijo, kopiranja 20 znakov iz bara v kaj?
c, sicer znan kot naš buffer, kar pomeni, da si napisal podatke
do 8 bajtov lokacijah, ki ni v vaši lasti,
in ne njihov lastnik v smislu, da jih nikoli ne dodelijo.
Torej, to je tisto, kar je splošno znano kot napad buffer overflow,
ali medpomnilnika napad in da je napad v smislu, da če uporabnik
ali program, ki kliče svojo funkcijo, to počne zlonamerno,
kaj se dejansko zgodi potem je lahko precej slabo.
>> Oglejmo si te slike tukaj.
Ta slika predstavlja svoj kup pomnilnika.
In spomnim, da vsakič, ko pokličete funkcijo,
boste dobili tale okvir na sklad, nato drugo in nato drugo in nato drugo.
In tako daleč, da smo nekako odvzete to stran kot pravokotnike
ali je na krovu ali na zaslonu tukaj.
Ampak, če povečate na eno od teh motivov
Ko pokličete funkcijo foo, se je izkazalo, da to še ni vse na kupu
znotraj tega okvirja in da pravokotnik
kot samo x in y ter a in b, tako kot nismo govorili o zamenjavi.
Izkazalo se je, da so nekateri nižji ravni podrobnosti,
med njimi vrnitev naslov.
Tako se izkaže, ko je glavna zahteva foo, glavni obvestiti foo
Kaj je glavni naslov v pomnilniku računalnika.
Ker drugače se takoj foo storiti izvršitve, kot v tem primeru tukaj,
ko pridete na to tesno kodraste brace na koncu foo,
kako za vraga ne ve, kje je foo nadzora programa naj bi šel?
Izkaže se, da je odgovor na to vprašanje je v tem rdečega pravokotnika tukaj.
To predstavlja kazalec, in to je do računalnika za shranjevanje, začasno,
na tako imenovani dimnik je glavni naslov, tako da kakor hitro foo storiti izvršitve,
računalnik ve, kje in kaj postavka v glavnem za vrnitev.
Shranjeni okvir kazalec se nanaša prav na to.
Char * bar tu pomeni kaj?
No, zdaj je to modra segmentnih je okvir, bla je, kaj je bar?
Ok, bar je samo argument funkcije foo.
>> Torej, zdaj smo spet na znano sliko.
Obstaja več stvari in več motenj na zaslonu
vendar je ta svetlo modra odsek je tisto, kar smo se opira na tablo za nekaj podobnega zamenjave.
To je okvir za foo in edina stvar v njem sedaj nahaja bar,
ki je ta parameter.
Vendar pa je treba, kaj se v plasteh, v skladu s tem kodeksom tukaj?
Char c [12]. Torej moramo tudi videti 12 kvadratov spomina,
dodeljena spremenljivki, imenovano c.
In res mi je, da na zaslonu.
Samem vrhu je c [0], nato pa avtor tega diagrama
ni motilo pripravo vseh trgih, vendar so v resnici obstaja 12
ker če pogledaš na spodnji desni, c [11], če šteješ od 0, je 12 takih bajtov.
Ampak tukaj je problem: V katero smer je C raste?
Nekako zgoraj navzdol, kajne? Če se začne na vrhu in raste do dna,
ne izgleda kot smo odšli sami veliko vzletno-pristajalne steze tu sploh.
Mi smo nekako sebe naslikal v kotu,
in c [11] je prav proti baru, ki je vse do pred dimnika okvirja kazalcem
, ki je vse do pred povratnim naslovom, da ni več prostora.
Torej, kaj je bila posledica, potem, če si zamočil,
in poskusite branje 20 bajtov v 12-Bajt?
Kadar so ti dodatni 8 bajtov šli?
Znotraj vsega drugega, nekaj kar je zelo pomembno.
In najbolj pomembna stvar, lahko je rdeča škatla tam, vaš naslov.
Ker predvidevam, da ste pomotoma ali adversarially
prepisati tiste 4 bajte, da kazalec naslov,
ne samo s smetmi, vendar z nekaterimi, ki se zgodi, da predstavljajo dejanskega naslova v spominu?
Kaj je implicaiton, logično?
[Študentski odgovori, nerazumljiv] >> Točno tako. Ko se vrne foo
in zadetki, ki brace kodrasti, program bo nadaljevanje ne bo vrnil na main,
da se bo vrnil na kateri koli naslov v tem rdečem polju.
>> Zdaj, v primeru izognilo programske opreme registracije
kaj je naslov, ki se je vrnil, da je funkcija
da dobi običajno imenujemo ko boste plačali za programsko opremo in vnesejo svojo registracijsko kodo?
Lahko bi razvrstiti trik računalnik v ne bo tukaj, ampak namesto tega dogaja tukaj.
Ali pa, če si res pameten, lahko nasprotnik dejansko vnesite na tipkovnici,
na primer, ni dejansko besedo, ne pa 20 znakov, ampak predvidevam on ali ona
vrste v nekaterih znakov, ki predstavljajo kodo?
In to ne bo C kodo, da bo v znake
ki predstavljajo šifre, binarne stroje 0 in 1 je.
Recimo, da si dovolj pameten, da bi to dosegli, bi nekako prilepite v GetString poziv
nekaj, kar je v bistvu sestavljen kodo
in zadnja 4 bajte prepisati, da povratni naslov, naslov in kaj ne, da vložek ne?
V njej so zbrani v tej rdeči pravokotnik naslov prvega bajt pufra.
Torej moraš biti zelo pameten, in to je veliko poskusov in napak
za slabe ljudi tam zunaj, ampak, če lahko ugotovimo, kako velik je ta blažilec,
tako, da je v zadnjih nekaj bajtov na vhodu, ki jih posredujete programa
zgodi, da se enakovredno naslovu začetku vašega pufer,
lahko to storijo. Če rečemo, normalno, zdravo in \ 0, to je tisto, kar konča v pufru.
Ampak, če smo bolj pameten in mi zapolnil to rezervo s tem, kar bomo generično klic napad kodo,
,,,: Napad, napad, napad, napad, če je to nekaj, kar počne nekaj slabega.
No, kaj se zgodi, če si res pameten, lahko naredite to:
V rdečem polju tu je zaporedje številk: 80, CO, 35, 08.
Obvestilo, da se ujema s številko, ki je tu gor.
To je v obratnem vrstnem redu, a več o tem kdaj drugič.
Obvestilo, da je to vaš naslov je bil namerno spremenjen
na enak naslov tukaj, ne naslov glavnega.
Torej, če je slab, je zelo pameten, on ali ona se dogaja, da so v tem napadu kodo
nekaj podobnega, "Izbrišite vse datoteke uporabnika."
Ali "Kopiraj gesla, 'ali' Ustvari svoj uporabniški račun, da bom lahko prijavi v."
Karkoli, in to je tako nevarnost in moč C.
Ker imate dostop do pomnilnika preko kazalcev
in lahko zato napišete karkoli želite v spomin računalnika.
Lahko naredite računalnik storiti vse, kar hočeš samo s
potem pa preskakujejo v svojem pomnilnika.
In tako je tudi danes, tako da veliko programov in toliko spletnih strani, ki so ogrožena
omejijo na ljudi, ki izkoriščajo to.
In morda to zdi super prefinjeno napada,
vendar ne vedno začne na tak način.
>> Dejstvo je, da tisto, kar slabi ljudje navadno storiti, je,
ali je to program v ukazni vrstici ali program, GUI, ali spletne strani,
je pravkar začel zagotavljati neumnosti.
Vnesete v res velikem besedo v iskalno polje ter zadeti nastopiti,
in počakate, da vidim, če je na spletni strani zruši.
Ali pa čakam, da vidim, če je program kaže nekaj o napaki.
Ker, če boste dobili srečo, kot je slab človek,
in si zagotoviti nekaj norega vhod, ki se zruši program,
to pomeni, da programer ni predvidel svoje slabo vedenje
kar pomeni, da lahko verjetno, z dovolj truda,
dovolj poskusov in napak, ugotoviti, kako plače natančnejši napad.
Torej toliko del varnosti ni samo preprečevanje te napade v celoti, vendar jih zazna
in dejansko si ogleduje dnevnike in videli, kaj so ljudje nori vhodi vnesli v vašo spletno stran.
Kaj iskalni pojmi so ljudje vnesli v vašo spletno stran, v upanju, poplavljenih nekaj buffer?
In to vse izvira na preprostih osnove, kar je matrika,
in kaj to pomeni za dodeljevanje in uporabo spomin?
In povezano z Tudi to je to.
>> Torej, kaj je samo pogled v notranjosti trdega diska še enkrat.
Torej spomnite iz teden ali dva nazaj, ko povlečete datoteke
da lahko koš ali smeti, kaj se zgodi?
[Študent] Nič. >> Ja, popolnoma nič. Sčasoma, če naletite nizka
prostora na disku, bo Windows ali Mac OS začetek brisanje datotek za vas.
Ampak, če vlečete nekaj notri, potem pa sploh ni varno.
Vse vaše član roomate, prijatelja ali družinskega storiti, je dvojni klik, in voila.
Tam je vse skicirana datoteke, ki jih poskušali izbrisati.
Torej, večina od nas vsaj vedeli, da imate na desni klik ali nadzor klik
in prazne smeti, ali nekaj takega.
Toda tudi takrat, da ni čisto narediti trik.
Ker to, kar se zgodi, ko imate datoteko na trdem disku
, ki predstavlja nekaj Wordov dokument ali nekaj JPEG?
In to predstavlja vaš trdi disk, in recimo, da to pomeni, da je tukaj IVer datoteko
in je bila sestavljena iz cel kup 0 in 1 je.
Kaj se zgodi, če ne boste le povlecite datoteko v koš ali koš,
ampak jo izpraznite?
Nekako nič. To ni popolnoma nič zdaj.
Zdaj je samo nič, ker je malo nekaj zgodi v obliki te tabele.
Torej je neke vrste podatkovne baze ali tabele znotraj pomnilnika računalnika
da je v bistvu 1 stolpec datotek imen,
in 1 stolpec za lokacijo datoteke, kjer bi to bilo mesto 123, samo naključno število.
Tako bi imeli nekaj podobnega x.jpg in mesto, 123.
In kaj se zgodi potem, ko izpraznite koš?
Ta izgine. Toda kaj ne izgine, je 0 in 1 je.
>> Torej kaj, potem je povezava z pset 4?
No, z pset 4, samo zato, ker smo pomotoma izbrisanih
compact flash kartico, ki je imel vse te fotografije,
ali pa samo zato, ker je zaradi smole postal poškodovana,
ne pomeni, da je 0 in 1 je niso še vedno tam.
Morda so nekateri od njih izgubljena zaradi dobil nekaj pokvarjenega
v smislu, da so nekateri 0 je postal 1 in 1 je postal 0 letih.
Slabe stvari se lahko zgodi zaradi Otroški voziček programske opreme ali napako strojne opreme.
Toda mnogi od teh bitov, morda celo 100% od njih so še vedno tam,
to je samo, da je računalnik ali fotoaparat ne ve, kje JPEG 1 vpis
in če JPEG 2 vpis v register, če pa je programer,
Veš, z malo zdrava pamet, če ti JPEG ali so kako izgledajo,
lahko analizirate 0 in 1 je in rekel: "Oh. JPEG. Oh, JPEG. "
Lahko napišete program z bistvu le za ali while zanko
da povrne vsak izmed teh datotek.
Torej lekcija pa je, da začnete "varno" brisanje datotek
če želite, da bi se temu izognili v celoti. Ja?
[Student vprašanje, nerazumljiv]
Ste >> več pomnilnika, kot si prej -
Oh! Dobro vprašanje. Torej, zakaj potem, ko praznjenjem koša,
se računalnik vam povem, da imate več prostora, kot si prej?
Na kratko, ker laže. Bolj tehnično, imate več prostora.
Ker zdaj si rekel, lahko dajo druge stvari, kjer je datoteka nekoč bil,
vendar to ne pomeni bitov odhajam
in da ne pomeni bitov se spremenila vse 0 je, na primer, za svojo zaščito.
V nasprotju s tem, če si "varen" brisanje datotek, ali fizično uničiti napravo
je to res edini način, včasih okoli tega.
Torej, zakaj ne gremo na ta pol strašno note, mi pa vas bomo videli v ponedeljek.
CS50.TV