[CHWARAE CERDDORIAETH] ZAMYLA Chan: Gadewch i ni fynd i'r afael â gwella. Adfer mae'n debyg fy hoff PSET, ac yn bennaf oherwydd fy mod yn meddwl ei fod yn mewn gwirionedd, 'n sylweddol oera. Yn y bôn, rydych yn cael cof ffeil cerdyn yn lle lluniau wedi cael eu dileu. Ond beth ydych chi'n mynd i wneud yw nhw i gyd yn gwella. OK. Felly mae'n wirioneddol gyffrous, ond efallai ychydig bygythiol, oherwydd eich bod yn rhoi C ffeil ac yn wag rhaid i chi lenwi i mewn Iawn, felly gadewch i ni dorri'r hyn yn rhannau hydrin. Youll 'angen i agor y ffeil cerdyn cof. Mae hynny'n ymddangos yn ddigon syml. Yna, dod o hyd i'r dechrau o ddelwedd JPG. Holl ffeiliau ar y cof hwn cerdyn yn mynd i fod JPGs. Yna, ar ôl i chi ddod o hyd i'r dechrau, ydych yn mynd i agor JPG newydd, bod yw, fel, creu JPG, ac ysgrifennu 512 beit ar y tro hyd nes bod JPG newydd dod o hyd, ac yn gorffen y rhaglen, unwaith byddwch yn canfod diwedd y ffeil. Camau fel y cyntaf yw i agor y ffeil cerdyn cof. Ond eich bod yn gwybod hyn yn barod, ac mae ffeil swyddogaeth I / O na mynd i yn ddefnyddiol iawn. OK. Felly beth yw JPGs? Oherwydd bod angen i'r dechrau iddo. Wel, JPGs, yn union fel mapiau bit, yn unig dilyniannau o bytes. Yn ffodus, pob JPG dechrau gyda naill ai 0xff, 0xd8, 0xff, 0xe0, un dilyniant o bytes, neu un arall dilyniant o bytes. Felly, y rhai pedwar bytes dangos ddechrau JPG. Neb llai na y ddau cyfuniadau o bedwar bytes. Ac yn ffodus i ni, ffaith arall yr ydym yn yn gallu manteisio ar yw bod pob JPG yn cael ei storio ochr-yn-ochr ar y cerdyn cof. Rydw i wedi cynrychioli strwythur cerdyn cof sgematig ar y llithro yma. Yma, mae pob sgwâr, pob petryal, yn cynrychioli 512 bytes, a bydd yn dechrau gyda llwyd yn yr ystyr nad ydym yn ei wneud mewn gwirionedd yn cael JPG. Ond yna rydym yn taro yn olaf bloc gyda seren. Mae hynny'n golygu bod y pedwar bytes cyntaf allan o'r rhai a 512 yn un o ddau rhai dechrau dilyniannau o JPG. Ac rydym yn mynd oddi yno, ac yna unwaith un JPG yn dod i ben, yr un nesaf yn dechrau. Nid ydym yn byth yn cael unrhyw fwy o gofod llwyd yn y canol. Ond sut rydym yn mewn gwirionedd yn darllen hwn, a Darllenwch y 512 bytes fel y gallwn wneud y gymhariaeth y lle cyntaf? Wel, gadewch i ni fynd yn ôl at fread, a oedd yn cymryd yn y strwythur a fydd yn cynnwys y bytes eich bod yn darllen. Felly, rydych chi'n mynd i roi rhai mewn yno - maint, nifer, ac yna inpointer eich bod yn darllen o. Nawr, rydym yn awyddus i ddarllen 512 ar y tro, a rydym am i storio hyn mewn byffer, Rydw i'n mynd i alw. Yn y bôn, rydym yn mynd i gynnal ar y rhai 512 bytes ac yn gwneud pethau ag ef, dde? Rydym yn naill ai yn mynd i gymharu'r cyntaf pedwar bytes, neu rydym yn mynd i ddarllen yn, iawn? Felly, yna bydd y pwyntydd data, yna gwasanaethu fel eich clustogi, ac mae'r inpointer, wel, dyna dim ond yn mynd i fod eich cerdyn cof. Yn ôl at ein sgematig cerdyn cof. Rydym yn mynd i ddarllen 512 bytes ar y tro, storio pob bloc 512-beit i mewn i byffer, dal gafael ar y rhai byffer, y rhai 512 bytes, hyd nes ein bod yn gwybod yn union beth i'w wneud iddyn nhw. Felly, nid y dechrau yw unrhyw beth, felly byddwn yn darllen y byffer, cymharu, ac Ni fydd angen i ni wneud unrhyw beth ag ef. Ac yna, rydym o'r diwedd taro seren bloc, sy'n golygu ein bod yn i wedi canfu ein JPG cyntaf. Felly y byffer yn awr yn cynnal bytes o'r JPG. Y tro nesaf 512 bytes, oherwydd eu bod yn Nid bloc seren, hefyd yn rhan o'r JPG. A JPGs yn ddi-dor oddi yno ar i mewn, nes i ni gyrraedd y JPG nesaf. Ac yna y byffer, yna dal 512 bytes am y JPG, a yn y blaen, ac yn y blaen. OK. Felly, unwaith y byddwch yn cyrraedd y seren gyntaf bloc, y JPG gyntaf, sut ydych chi'n mewn gwirionedd, yn dda, agor? Gadewch i ni wneud JPG newydd. Mae'r enwau ffeiliau ar gyfer JPG yn mynd i fod yn y ffurf, rhif, rhif, number.jpg, yn yr ystyr eu bod yn a enwir yn y drefn y maent yn cael eu canfod, yn dechrau ar 0. Felly, y JPG cyntaf y byddwch yn yn dod o hyd yn cael ei 000.jpg. Felly, yn ôl pob tebyg yn syniad da i gadw golwg ar o faint o JPGs yr ydych wedi dod o hyd hyd yn hyn. Felly dyna enw'r ffeil. Ond sut ydych chi mewn gwirionedd yn gwneud hynny? Wel, rydym yn mynd i ddefnyddio swyddogaeth a elwir yn sprintf. Mae ychydig bach tebyg i printf, lle gallwch ddefnyddio bachau ar gyfer llinynnau, ac eithrio yn yr achos hwn, bydd sprintf argraffu y ffeil allan i'r presennol cyfeiriadur, nid i'r derfynell. OK. Felly, yma rydym yn gweld bod gennym teitl, amrywiaeth torgoch a fydd yn storio'r llinyn canlyniadol, ac yr ydym yn pasio yn y teitl y llinyn gwirioneddol gyda placeholder, yn union fel rydym wedi dysgu i'w wneud â printf. Ond y cod hwn yr wyf wedi yma yn rhoi 2.jpg, nid 002.jpg. Felly, byddaf yn gadael i chi i gael gwybod sut i addasu'r placeholder i wneud y enw cywir. OK. Felly, unwaith y byddwch wedi sprintf'd, yna gallwch agor y ffeil, gan ei fod yn bodoli mewn eich cyfeiriadur, gyda fopen, gan ddefnyddio'r teitl, ac yna pa bynnag ddull rydych am i agor y ffeil i mewn Felly, yn awr ein bod wedi agor ffeil JPG newydd, erbyn hyn gallwn ysgrifennu 512 bytes mewn amser, hyd nes y bydd JPG newydd yn dod o hyd. Felly, gadewch i ni edrych eto ar y cystrawen fwrite. Gwn fy mod yn dangos y sleid hon yn llawer, ond Fi jyst eisiau gwneud yn siŵr bod nad ydych guys yn mynd yn rhy ddryslyd, oherwydd Yr wyf yn gwybod ei bod yn hawdd iawn i cymysgu i fyny y cyntaf a'r olaf dadl, yn arbennig. Ond cofiwch eich bod yn ysgrifennu o eich byffer i mewn i'r delweddau ffeiliau y tu allan. Nawr eich bod yn gwybod sut y mae'r ysgrifennu 512 bytes i mewn i'ch ffeil JPG yr ydych wedi creu, yn dda, rydym am i atal hynny broses unwaith y byddwn wedi cyrraedd diwedd ein cerdyn, gan na fydd unrhyw mwy o luniau i'w gael. Felly, gadewch i ni fynd yn ôl at fread unwaith eto, yr wyf yn addo. fread dychwelyd faint o eitemau o faint, maint, yn barod yn llwyddiannus. Yn ddelfrydol, mae hyn yn mynd i fod beth bynnag byddwch yn pasio i mewn ar gyfer nifer, dde? Oherwydd eich bod yn ceisio darllen nifer o elfennau o faint, maint. Ond os nad fread yn gallu darllen y nifer o elfennau, yna bydd yn dychwelyd pa bynnag nifer darllen yn llwyddiannus. Yn awr, mae un peth pwysig i'w nodi yw os ydych yn defnyddio ffeil arall I / O swyddogaeth fel fgetc, bydd yn hefyd ddychwelyd faint o eitemau y mae'n darllen yn llwyddiannus. Beth sy'n ddefnyddiol am y swyddogaeth hon yn os ydych yn defnyddio swyddogaethau tu mewn i cyflwr, bydd yn gweithredu ei hun tra penderfynu cyflwr hwnnw, sy'n dim ond yn ddefnyddiol iawn. Felly, os oes gennych hyn amodau, dyweder, os byffer fread, CI sizeof, 2, pwyntydd, yn hafal i 1 yn hafal i, bod yn golygu y byddwn i'n hoffi darllen 2 gi ar y pryd. Ond os fread yn dychwelyd 1 yn hytrach na 2 fel disgwyl, mae hynny'n golygu bod yna 2 cŵn ar ôl yn fy ffeil, ond yn hytrach 1. Ond os bydd yn dychwelyd 2, yna rwyf yn dal i gael y rhai 2 gi tu mewn fy byffer. Felly, yn awr sy'n rhoi ymdeimlad o sut i chi wirio ar gyfer diwedd y ffeil, ond gadewch i ni fynd drwy'r hyn y rhesymeg. Sut rydym yn mewn gwirionedd yn ddarn pob elfennau hyn at ei gilydd? Unwaith y byddwn yn cyrraedd ein JPG cyntaf, gan fod rydym yn gwybod bod JPGs yn cael eu storio contiguously, byddwn yn ysgrifennu nes rydym yn cyrraedd diwedd y ffeil cerdyn. Ond nid ydym am i ysgrifennu unrhyw beth tan hynny. Felly mae'n bwysig, nid yn unig ein bod ni'n ar ddechrau JPG newydd, ond a rydym eisoes wedi dod o hyd i JPG neu beidio. Os Mae'n ddechrau JPG newydd, rydym annhymerus ' am gau ein ffeil JPG cyfredol os mae gennym un ar agor, ac yn agored un newydd i ysgrifennu i mewn. Os nad yw'n dechrau'r JPG newydd, fodd bynnag, byddwn yn cadw yr un ffeil JPG agor ac ysgrifennu i mewn i hynny. Byddwn yn ysgrifennu ein byffer i ba un bynnag Ffeil JPG gennym agored, ar yr amod bod mae gennym un ar agor, wrth gwrs. Os nad ydym wedi dod o hyd ein JPG cyntaf eto, nid ydym yn ysgrifennu unrhyw beth. Ac mae'r broses hon yn parhau hyd nes y byddwch cyrraedd diwedd y ffeil cerdyn. Ac yn olaf, byddwch am wneud yn siwr eich bod yn mmap unrhyw ffeiliau eich bod wedi fopened. Unwaith y byddwch yn gyfforddus gyda'r cysyniadau, yn edrych ar rai pseudocode, yr wyf wedi cynnwys yma. Yn gyntaf, yr ydych am i agor y ffeil cerdyn, ac yna ailadrodd y broses ganlynol hyd nes y byddwch wedi cyrraedd y diwedd y cerdyn. Byddwch am ddarllen 512 bytes i mewn i byffer. Gan ddefnyddio y byffer, youll 'angen at wirio a ydych chi yn ddechrau JPG newydd neu beidio. A'r ateb i'r cwestiwn hwnnw yn effeithio ar eich rheoli ffeiliau - pa ffeiliau i chi agor, a oedd yn rai ydych chi'n cau. Yna, ydych chi eisoes yn dod o hyd i JPG? Sut ydych chi wedi bod yn cadw golwg ar hynny? Yna, yn dibynnu ar hynny, byddwch naill ai ysgrifennu i mewn i'r JPG presennol yr ydych cael agored, neu ag ysgrifennu o gwbl, oherwydd nad ydych wedi dod o hyd i JPG eto. Yn olaf, unwaith y byddwch wedi cyrraedd diwedd y ffeil, youll 'angen at gau unrhyw ffeiliau sydd gennych ar agor ar ôl. Rydym yn awyddus i fod yn daclus yma. A chyda hynny, rydych chi wedi adennill yr holl y ffeiliau coll o'r cof cerdyn, sydd yn gamp eithaf anhygoel. Felly, pat eich hun ar y cefn. Ond, mae un elfen mwy i y PSET, sef y gystadleuaeth. Fe welwch fod yr holl o'r lluniau eich bod wedi adennill mewn gwirionedd yn lluniau o staff yn CS50. Felly, os ydych chi ar y campws neu rywle ger, yna gallwch chi gymryd lluniau gyda y staff, ac mae'r adran sydd â'r y rhan fwyaf o luniau gydag aelodau o staff gan eu ffeiliau adennill yn cael gwobr awesome. Gyda hynny, yna rydych wedi gorffen y adennill PSET. Fy enw i yw Zamyla, ac mae hyn yn CS50.