1 00:00:00,000 --> 00:00:09,780 >> [CHWARAE CERDDORIAETH] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA Chan: Gadewch i ni fynd i'r afael â gwella. 3 00:00:11,150 --> 00:00:14,030 Adfer mae'n debyg fy hoff PSET, ac yn bennaf oherwydd fy mod yn meddwl ei fod yn 4 00:00:14,030 --> 00:00:15,650 mewn gwirionedd, 'n sylweddol oera. 5 00:00:15,650 --> 00:00:19,040 Yn y bôn, rydych yn cael cof ffeil cerdyn yn lle 6 00:00:19,040 --> 00:00:20,900 lluniau wedi cael eu dileu. 7 00:00:20,900 --> 00:00:23,650 Ond beth ydych chi'n mynd i wneud yw nhw i gyd yn gwella. 8 00:00:23,650 --> 00:00:24,250 >> OK. 9 00:00:24,250 --> 00:00:28,230 Felly mae'n wirioneddol gyffrous, ond efallai ychydig bygythiol, oherwydd eich bod yn 10 00:00:28,230 --> 00:00:32,430 rhoi C ffeil ac yn wag rhaid i chi lenwi i mewn 11 00:00:32,430 --> 00:00:36,250 Iawn, felly gadewch i ni dorri'r hyn yn rhannau hydrin. 12 00:00:36,250 --> 00:00:38,160 Youll 'angen i agor y ffeil cerdyn cof. 13 00:00:38,160 --> 00:00:39,900 Mae hynny'n ymddangos yn ddigon syml. 14 00:00:39,900 --> 00:00:43,030 Yna, dod o hyd i'r dechrau o ddelwedd JPG. 15 00:00:43,030 --> 00:00:46,740 Holl ffeiliau ar y cof hwn cerdyn yn mynd i fod JPGs. 16 00:00:46,740 --> 00:00:50,840 Yna, ar ôl i chi ddod o hyd i'r dechrau, ydych yn mynd i agor JPG newydd, bod 17 00:00:50,840 --> 00:00:57,610 yw, fel, creu JPG, ac ysgrifennu 512 beit ar y tro hyd nes bod JPG newydd 18 00:00:57,610 --> 00:01:02,930 dod o hyd, ac yn gorffen y rhaglen, unwaith byddwch yn canfod diwedd y ffeil. 19 00:01:02,930 --> 00:01:06,400 >> Camau fel y cyntaf yw i agor y ffeil cerdyn cof. 20 00:01:06,400 --> 00:01:09,850 Ond eich bod yn gwybod hyn yn barod, ac mae ffeil swyddogaeth I / O na mynd i 21 00:01:09,850 --> 00:01:12,030 yn ddefnyddiol iawn. 22 00:01:12,030 --> 00:01:12,820 OK. 23 00:01:12,820 --> 00:01:14,760 Felly beth yw JPGs? 24 00:01:14,760 --> 00:01:16,330 Oherwydd bod angen i'r dechrau iddo. 25 00:01:16,330 --> 00:01:21,310 Wel, JPGs, yn union fel mapiau bit, yn unig dilyniannau o bytes. 26 00:01:21,310 --> 00:01:30,660 Yn ffodus, pob JPG dechrau gyda naill ai 0xff, 0xd8, 0xff, 0xe0, un dilyniant 27 00:01:30,660 --> 00:01:33,610 o bytes, neu un arall dilyniant o bytes. 28 00:01:33,610 --> 00:01:37,250 >> Felly, y rhai pedwar bytes dangos ddechrau JPG. 29 00:01:37,250 --> 00:01:40,780 Neb llai na y ddau cyfuniadau o bedwar bytes. 30 00:01:40,780 --> 00:01:44,840 Ac yn ffodus i ni, ffaith arall yr ydym yn yn gallu manteisio ar yw bod pob 31 00:01:44,840 --> 00:01:48,550 JPG yn cael ei storio ochr-yn-ochr ar y cerdyn cof. 32 00:01:48,550 --> 00:01:52,210 Rydw i wedi cynrychioli strwythur cerdyn cof sgematig ar y 33 00:01:52,210 --> 00:01:53,310 llithro yma. 34 00:01:53,310 --> 00:01:59,270 Yma, mae pob sgwâr, pob petryal, yn cynrychioli 512 bytes, a bydd yn dechrau 35 00:01:59,270 --> 00:02:01,750 gyda llwyd yn yr ystyr nad ydym yn ei wneud mewn gwirionedd yn cael JPG. 36 00:02:01,750 --> 00:02:05,700 >> Ond yna rydym yn taro yn olaf bloc gyda seren. 37 00:02:05,700 --> 00:02:10,940 Mae hynny'n golygu bod y pedwar bytes cyntaf allan o'r rhai a 512 yn un o ddau rhai 38 00:02:10,940 --> 00:02:13,230 dechrau dilyniannau o JPG. 39 00:02:13,230 --> 00:02:17,340 Ac rydym yn mynd oddi yno, ac yna unwaith un JPG yn dod i ben, yr un nesaf yn dechrau. 40 00:02:17,340 --> 00:02:20,990 Nid ydym yn byth yn cael unrhyw fwy o gofod llwyd yn y canol. 41 00:02:20,990 --> 00:02:25,550 >> Ond sut rydym yn mewn gwirionedd yn darllen hwn, a Darllenwch y 512 bytes fel y gallwn wneud 42 00:02:25,550 --> 00:02:27,500 y gymhariaeth y lle cyntaf? 43 00:02:27,500 --> 00:02:33,470 Wel, gadewch i ni fynd yn ôl at fread, a oedd yn cymryd yn y strwythur a fydd yn cynnwys 44 00:02:33,470 --> 00:02:34,470 y bytes eich bod yn darllen. 45 00:02:34,470 --> 00:02:36,570 Felly, rydych chi'n mynd i roi rhai mewn yno - 46 00:02:36,570 --> 00:02:42,192 maint, nifer, ac yna inpointer eich bod yn darllen o. 47 00:02:42,192 --> 00:02:49,900 Nawr, rydym yn awyddus i ddarllen 512 ar y tro, a rydym am i storio hyn mewn byffer, 48 00:02:49,900 --> 00:02:50,700 Rydw i'n mynd i alw. 49 00:02:50,700 --> 00:02:54,100 >> Yn y bôn, rydym yn mynd i gynnal ar y rhai 512 bytes ac yn gwneud 50 00:02:54,100 --> 00:02:55,500 pethau ag ef, dde? 51 00:02:55,500 --> 00:02:58,260 Rydym yn naill ai yn mynd i gymharu'r cyntaf pedwar bytes, neu rydym yn mynd i 52 00:02:58,260 --> 00:02:59,830 ddarllen yn, iawn? 53 00:02:59,830 --> 00:03:05,050 Felly, yna bydd y pwyntydd data, yna gwasanaethu fel eich clustogi, ac mae'r 54 00:03:05,050 --> 00:03:07,745 inpointer, wel, dyna dim ond yn mynd i fod eich cerdyn cof. 55 00:03:07,745 --> 00:03:09,500 >> Yn ôl at ein sgematig cerdyn cof. 56 00:03:09,500 --> 00:03:14,690 Rydym yn mynd i ddarllen 512 bytes ar y tro, storio pob bloc 512-beit 57 00:03:14,690 --> 00:03:19,190 i mewn i byffer, dal gafael ar y rhai byffer, y rhai 512 bytes, hyd nes ein bod yn gwybod 58 00:03:19,190 --> 00:03:22,000 yn union beth i'w wneud iddyn nhw. 59 00:03:22,000 --> 00:03:25,960 Felly, nid y dechrau yw unrhyw beth, felly byddwn yn darllen y byffer, cymharu, ac 60 00:03:25,960 --> 00:03:28,160 Ni fydd angen i ni wneud unrhyw beth ag ef. 61 00:03:28,160 --> 00:03:32,030 Ac yna, rydym o'r diwedd taro seren bloc, sy'n golygu ein bod yn i wedi 62 00:03:32,030 --> 00:03:33,630 canfu ein JPG cyntaf. 63 00:03:33,630 --> 00:03:36,560 Felly y byffer yn awr yn cynnal bytes o'r JPG. 64 00:03:36,560 --> 00:03:40,220 >> Y tro nesaf 512 bytes, oherwydd eu bod yn Nid bloc seren, hefyd yn 65 00:03:40,220 --> 00:03:41,740 rhan o'r JPG. 66 00:03:41,740 --> 00:03:47,630 A JPGs yn ddi-dor oddi yno ar i mewn, nes i ni gyrraedd y JPG nesaf. 67 00:03:47,630 --> 00:03:51,880 Ac yna y byffer, yna dal 512 bytes am y JPG, a 68 00:03:51,880 --> 00:03:53,580 yn y blaen, ac yn y blaen. 69 00:03:53,580 --> 00:03:54,250 OK. 70 00:03:54,250 --> 00:03:58,980 >> Felly, unwaith y byddwch yn cyrraedd y seren gyntaf bloc, y JPG gyntaf, sut ydych chi'n 71 00:03:58,980 --> 00:04:01,910 mewn gwirionedd, yn dda, agor? 72 00:04:01,910 --> 00:04:04,990 Gadewch i ni wneud JPG newydd. 73 00:04:04,990 --> 00:04:08,846 Mae'r enwau ffeiliau ar gyfer JPG yn mynd i fod yn y ffurf, rhif, rhif, 74 00:04:08,846 --> 00:04:13,830 number.jpg, yn yr ystyr eu bod yn a enwir yn y drefn y maent yn cael eu canfod, 75 00:04:13,830 --> 00:04:14,780 yn dechrau ar 0. 76 00:04:14,780 --> 00:04:19,890 >> Felly, y JPG cyntaf y byddwch yn yn dod o hyd yn cael ei 000.jpg. 77 00:04:19,890 --> 00:04:26,560 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. 78 00:04:26,560 --> 00:04:27,610 Felly dyna enw'r ffeil. 79 00:04:27,610 --> 00:04:29,660 Ond sut ydych chi mewn gwirionedd yn gwneud hynny? 80 00:04:29,660 --> 00:04:34,310 Wel, rydym yn mynd i ddefnyddio swyddogaeth a elwir yn sprintf. 81 00:04:34,310 --> 00:04:38,260 Mae ychydig bach tebyg i printf, lle gallwch ddefnyddio bachau ar gyfer llinynnau, 82 00:04:38,260 --> 00:04:42,420 ac eithrio yn yr achos hwn, bydd sprintf argraffu y ffeil allan i'r presennol 83 00:04:42,420 --> 00:04:45,550 cyfeiriadur, nid i'r derfynell. 84 00:04:45,550 --> 00:04:46,120 >> OK. 85 00:04:46,120 --> 00:04:49,950 Felly, yma rydym yn gweld bod gennym teitl, amrywiaeth torgoch a fydd yn storio'r 86 00:04:49,950 --> 00:04:55,120 llinyn canlyniadol, ac yr ydym yn pasio yn y teitl y llinyn gwirioneddol gyda 87 00:04:55,120 --> 00:04:58,720 placeholder, yn union fel rydym wedi dysgu i'w wneud â printf. 88 00:04:58,720 --> 00:05:05,530 Ond y cod hwn yr wyf wedi yma yn rhoi 2.jpg, nid 002.jpg. 89 00:05:05,530 --> 00:05:09,920 Felly, byddaf yn gadael i chi i gael gwybod sut i addasu'r placeholder i wneud y 90 00:05:09,920 --> 00:05:11,920 enw cywir. 91 00:05:11,920 --> 00:05:12,610 >> OK. 92 00:05:12,610 --> 00:05:17,390 Felly, unwaith y byddwch wedi sprintf'd, yna gallwch agor y ffeil, gan ei fod yn bodoli mewn 93 00:05:17,390 --> 00:05:22,690 eich cyfeiriadur, gyda fopen, gan ddefnyddio'r teitl, ac yna pa bynnag ddull rydych am 94 00:05:22,690 --> 00:05:25,140 i agor y ffeil i mewn 95 00:05:25,140 --> 00:05:30,260 Felly, yn awr ein bod wedi agor ffeil JPG newydd, erbyn hyn gallwn ysgrifennu 512 bytes mewn 96 00:05:30,260 --> 00:05:33,320 amser, hyd nes y bydd JPG newydd yn dod o hyd. 97 00:05:33,320 --> 00:05:36,640 Felly, gadewch i ni edrych eto ar y cystrawen fwrite. 98 00:05:36,640 --> 00:05:40,060 >> Gwn fy mod yn dangos y sleid hon yn llawer, ond Fi jyst eisiau gwneud yn siŵr bod 99 00:05:40,060 --> 00:05:43,530 nad ydych guys yn mynd yn rhy ddryslyd, oherwydd Yr wyf yn gwybod ei bod yn hawdd iawn i 100 00:05:43,530 --> 00:05:47,000 cymysgu i fyny y cyntaf a'r olaf dadl, yn arbennig. 101 00:05:47,000 --> 00:05:54,390 Ond cofiwch eich bod yn ysgrifennu o eich byffer i mewn i'r delweddau ffeiliau y tu allan. 102 00:05:54,390 --> 00:05:59,250 >> Nawr eich bod yn gwybod sut y mae'r ysgrifennu 512 bytes i mewn i'ch ffeil JPG yr ydych wedi 103 00:05:59,250 --> 00:06:03,230 creu, yn dda, rydym am i atal hynny broses unwaith y byddwn wedi cyrraedd diwedd 104 00:06:03,230 --> 00:06:06,720 ein cerdyn, gan na fydd unrhyw mwy o luniau i'w gael. 105 00:06:06,720 --> 00:06:10,760 Felly, gadewch i ni fynd yn ôl at fread unwaith eto, yr wyf yn addo. 106 00:06:10,760 --> 00:06:15,600 fread dychwelyd faint o eitemau o faint, maint, yn barod yn llwyddiannus. 107 00:06:15,600 --> 00:06:19,440 Yn ddelfrydol, mae hyn yn mynd i fod beth bynnag byddwch yn pasio i mewn ar gyfer nifer, dde? 108 00:06:19,440 --> 00:06:24,140 Oherwydd eich bod yn ceisio darllen nifer o elfennau o faint, maint. 109 00:06:24,140 --> 00:06:29,380 Ond os nad fread yn gallu darllen y nifer o elfennau, yna bydd yn dychwelyd 110 00:06:29,380 --> 00:06:32,530 pa bynnag nifer darllen yn llwyddiannus. 111 00:06:32,530 --> 00:06:36,310 >> Yn awr, mae un peth pwysig i'w nodi yw os ydych yn defnyddio ffeil arall I / O 112 00:06:36,310 --> 00:06:43,860 swyddogaeth fel fgetc, bydd yn hefyd ddychwelyd faint o eitemau y mae'n darllen yn llwyddiannus. 113 00:06:43,860 --> 00:06:48,000 Beth sy'n ddefnyddiol am y swyddogaeth hon yn os ydych yn defnyddio swyddogaethau tu mewn i 114 00:06:48,000 --> 00:06:53,190 cyflwr, bydd yn gweithredu ei hun tra penderfynu cyflwr hwnnw, sy'n 115 00:06:53,190 --> 00:06:54,340 dim ond yn ddefnyddiol iawn. 116 00:06:54,340 --> 00:07:00,440 Felly, os oes gennych hyn amodau, dyweder, os byffer fread, CI sizeof, 2, 117 00:07:00,440 --> 00:07:04,870 pwyntydd, yn hafal i 1 yn hafal i, bod yn golygu y byddwn i'n hoffi darllen 118 00:07:04,870 --> 00:07:06,540 2 gi ar y pryd. 119 00:07:06,540 --> 00:07:13,490 Ond os fread yn dychwelyd 1 yn hytrach na 2 fel disgwyl, mae hynny'n golygu bod yna 2 120 00:07:13,490 --> 00:07:16,480 cŵn ar ôl yn fy ffeil, ond yn hytrach 1. 121 00:07:16,480 --> 00:07:22,450 Ond os bydd yn dychwelyd 2, yna rwyf yn dal i gael y rhai 2 gi tu mewn fy byffer. 122 00:07:22,450 --> 00:07:26,280 >> Felly, yn awr sy'n rhoi ymdeimlad o sut i chi wirio ar gyfer diwedd y ffeil, ond 123 00:07:26,280 --> 00:07:28,940 gadewch i ni fynd drwy'r hyn y rhesymeg. 124 00:07:28,940 --> 00:07:32,460 Sut rydym yn mewn gwirionedd yn ddarn pob elfennau hyn at ei gilydd? 125 00:07:32,460 --> 00:07:36,880 Unwaith y byddwn yn cyrraedd ein JPG cyntaf, gan fod rydym yn gwybod bod JPGs yn cael eu storio 126 00:07:36,880 --> 00:07:40,910 contiguously, byddwn yn ysgrifennu nes rydym yn cyrraedd diwedd y ffeil cerdyn. 127 00:07:40,910 --> 00:07:43,950 Ond nid ydym am i ysgrifennu unrhyw beth tan hynny. 128 00:07:43,950 --> 00:07:48,710 Felly mae'n bwysig, nid yn unig ein bod ni'n ar ddechrau JPG newydd, ond a 129 00:07:48,710 --> 00:07:50,655 rydym eisoes wedi dod o hyd i JPG neu beidio. 130 00:07:50,655 --> 00:07:55,390 >> Os Mae'n ddechrau JPG newydd, rydym annhymerus ' am gau ein ffeil JPG cyfredol os 131 00:07:55,390 --> 00:07:59,110 mae gennym un ar agor, ac yn agored un newydd i ysgrifennu i mewn. 132 00:07:59,110 --> 00:08:03,340 Os nad yw'n dechrau'r JPG newydd, fodd bynnag, byddwn yn cadw yr un ffeil JPG 133 00:08:03,340 --> 00:08:05,910 agor ac ysgrifennu i mewn i hynny. 134 00:08:05,910 --> 00:08:10,100 Byddwn yn ysgrifennu ein byffer i ba un bynnag Ffeil JPG gennym agored, ar yr amod bod 135 00:08:10,100 --> 00:08:12,120 mae gennym un ar agor, wrth gwrs. 136 00:08:12,120 --> 00:08:16,190 Os nad ydym wedi dod o hyd ein JPG cyntaf eto, nid ydym yn ysgrifennu unrhyw beth. 137 00:08:16,190 --> 00:08:20,290 Ac mae'r broses hon yn parhau hyd nes y byddwch cyrraedd diwedd y ffeil cerdyn. 138 00:08:20,290 --> 00:08:23,410 >> Ac yn olaf, byddwch am wneud yn siwr eich bod yn mmap unrhyw 139 00:08:23,410 --> 00:08:25,800 ffeiliau eich bod wedi fopened. 140 00:08:25,800 --> 00:08:28,360 Unwaith y byddwch yn gyfforddus gyda'r cysyniadau, yn edrych ar rai 141 00:08:28,360 --> 00:08:30,840 pseudocode, yr wyf wedi cynnwys yma. 142 00:08:30,840 --> 00:08:34,830 Yn gyntaf, yr ydych am i agor y ffeil cerdyn, ac yna ailadrodd y broses ganlynol 143 00:08:34,830 --> 00:08:37,144 hyd nes y byddwch wedi cyrraedd y diwedd y cerdyn. 144 00:08:37,144 --> 00:08:40,880 Byddwch am ddarllen 512 bytes i mewn i byffer. 145 00:08:40,880 --> 00:08:43,934 Gan ddefnyddio y byffer, youll 'angen at wirio a ydych chi yn ddechrau 146 00:08:43,934 --> 00:08:45,300 JPG newydd neu beidio. 147 00:08:45,300 --> 00:08:48,400 A'r ateb i'r cwestiwn hwnnw yn effeithio ar eich rheoli ffeiliau - 148 00:08:48,400 --> 00:08:51,940 pa ffeiliau i chi agor, a oedd yn rai ydych chi'n cau. 149 00:08:51,940 --> 00:08:55,220 >> Yna, ydych chi eisoes yn dod o hyd i JPG? 150 00:08:55,220 --> 00:08:57,740 Sut ydych chi wedi bod yn cadw golwg ar hynny? 151 00:08:57,740 --> 00:09:01,735 Yna, yn dibynnu ar hynny, byddwch naill ai ysgrifennu i mewn i'r JPG presennol yr ydych 152 00:09:01,735 --> 00:09:07,090 cael agored, neu ag ysgrifennu o gwbl, oherwydd nad ydych wedi dod o hyd i JPG eto. 153 00:09:07,090 --> 00:09:10,870 Yn olaf, unwaith y byddwch wedi cyrraedd diwedd y ffeil, youll 'angen at gau unrhyw 154 00:09:10,870 --> 00:09:12,590 ffeiliau sydd gennych ar agor ar ôl. 155 00:09:12,590 --> 00:09:14,590 Rydym yn awyddus i fod yn daclus yma. 156 00:09:14,590 --> 00:09:18,790 >> A chyda hynny, rydych chi wedi adennill yr holl y ffeiliau coll o'r cof 157 00:09:18,790 --> 00:09:21,620 cerdyn, sydd yn gamp eithaf anhygoel. 158 00:09:21,620 --> 00:09:23,430 Felly, pat eich hun ar y cefn. 159 00:09:23,430 --> 00:09:27,560 Ond, mae un elfen mwy i y PSET, sef y gystadleuaeth. 160 00:09:27,560 --> 00:09:30,920 Fe welwch fod yr holl o'r lluniau eich bod wedi adennill mewn gwirionedd yn 161 00:09:30,920 --> 00:09:32,820 lluniau o staff yn CS50. 162 00:09:32,820 --> 00:09:38,500 Felly, os ydych chi ar y campws neu rywle ger, yna gallwch chi gymryd lluniau gyda 163 00:09:38,500 --> 00:09:42,600 y staff, ac mae'r adran sydd â'r y rhan fwyaf o luniau gydag aelodau o staff 164 00:09:42,600 --> 00:09:46,940 gan eu ffeiliau adennill yn cael gwobr awesome. 165 00:09:46,940 --> 00:09:50,650 Gyda hynny, yna rydych wedi gorffen y adennill PSET. 166 00:09:50,650 --> 00:09:53,600 Fy enw i yw Zamyla, ac mae hyn yn CS50. 167 00:09:53,600 --> 00:10:01,835