1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> Ræðumaður: Svo langt, það er líklegt að flestir af áætlunum þínum 3 00:00:07,870 --> 00:00:10,170 hafa verið dálítið skammvinn. 4 00:00:10,170 --> 00:00:13,310 Þú keyra forrit eins og Mario eða gráðugur. 5 00:00:13,310 --> 00:00:17,350 Það er eitthvað, það hvetja kannski notandinn að einhverjum upplýsingum, 6 00:00:17,350 --> 00:00:20,400 prenta sumir framleiðsla á skjáinn, en svo þegar forritið þitt er yfir, 7 00:00:20,400 --> 00:00:23,252 það er í raun ekkert sem bendir það það var alltaf að keyra í fyrsta sæti. 8 00:00:23,252 --> 00:00:25,960 Ég meina, viss, þú gætir átt eftir það opnast í flugstöðinni glugga, 9 00:00:25,960 --> 00:00:29,770 en ef þú hreinsa skjáinn, það er í raun ekkert sem bendir til að það hafi verið. 10 00:00:29,770 --> 00:00:33,720 Við höfum ekki að geyma viðvarandi upplýsingar, upplýsingar 11 00:00:33,720 --> 00:00:36,890 sem er til eftir okkar áætlun hefur verið hætt, 12 00:00:36,890 --> 00:00:39,241 eða við höfum ekki fram að þessu. 13 00:00:39,241 --> 00:00:41,490 Sem betur fer þó, c er veita okkur með hæfileika 14 00:00:41,490 --> 00:00:44,220 til að gera þetta með því að innleiða eitthvað sem kallast 15 00:00:44,220 --> 00:00:48,330 skrá, uppbygging sem í grundvallaratriðum táknar skrá sem þú myndir tvöfalda 16 00:00:48,330 --> 00:00:53,826 smelltu á tölvunni þinni, ef þú ert er notað til að myndrænt notandi umhverfi. 17 00:00:53,826 --> 00:00:55,700 Almennt þegar unnið með c, erum við í raun 18 00:00:55,700 --> 00:00:59,965 að fara að vinna með ábendingar til files-- skrá stars-- 19 00:00:59,965 --> 00:01:02,090 nema smá þegar við tölum um núna 20 00:01:02,090 --> 00:01:04,560 þær aðgerðir sem vinna með skrá ábendingum. 21 00:01:04,560 --> 00:01:08,990 Þú þarft ekki að hafa raunverulega grafið of djúpt í skilning ábendingum 22 00:01:08,990 --> 00:01:09,730 sjálfir. 23 00:01:09,730 --> 00:01:12,870 Það er lítill teeny hluti þar sem við munum tala um þá, 24 00:01:12,870 --> 00:01:18,090 en yfirleitt skrá ábendingum og ábendingum, en innbyrðis, 25 00:01:18,090 --> 00:01:20,290 eru ekki nákvæmlega það sama. 26 00:01:20,290 --> 00:01:22,440 >> Nú hvað ég meina þegar Ég segi viðvarandi gögn? 27 00:01:22,440 --> 00:01:23,650 Hvað er viðvarandi gögn? 28 00:01:23,650 --> 00:01:25,232 Hvers vegna eigum við að hugsa um það? 29 00:01:25,232 --> 00:01:27,190 Segja, til dæmis, að þú ert að keyra forrit 30 00:01:27,190 --> 00:01:29,850 eða þú hefur endurskrifa a forrit sem er leikur, 31 00:01:29,850 --> 00:01:32,960 og þú vilt halda utan af öllum færist notandans 32 00:01:32,960 --> 00:01:36,620 þannig að kannski ef eitthvað fer úrskeiðis, þú getur skoðað skrána eftir leikinn. 33 00:01:36,620 --> 00:01:39,970 Það er það sem er átt við þegar við tala um viðvarandi gögnum. 34 00:01:39,970 --> 00:01:43,930 >> Í tengslum við að keyra þinn program, skrá er búin til. 35 00:01:43,930 --> 00:01:45,680 Og þegar program hefur verið hætt, 36 00:01:45,680 --> 00:01:48,689 að skrá er enn til staðar á kerfinu þínu. 37 00:01:48,689 --> 00:01:50,230 Og við getum litið á það og skoða það. 38 00:01:50,230 --> 00:01:53,670 Og svo að forritið væri stillt á hafa búið til nokkrar viðvarandi gögn, 39 00:01:53,670 --> 00:01:57,390 gögn til eftir áætluninni hefur lokið gangi. 40 00:01:57,390 --> 00:02:02,320 >> Nú allar þessar aðgerðir sem vinna með að búa til skrár og notfæra 41 00:02:02,320 --> 00:02:04,940 þá á ýmsa vegu búa í venjulegu io.h, 42 00:02:04,940 --> 00:02:08,210 sem er haus skrá sem þú hefur líklega verið pund 43 00:02:08,210 --> 00:02:10,910 þar á meðal efst á ansi mikið öll forrit 44 00:02:10,910 --> 00:02:14,130 vegna þess að það hluta er einhver The gagnlegur virka fyrir okkur, 45 00:02:14,130 --> 00:02:16,130 printf, sem einnig er hægt býr í venjulegu io.h. 46 00:02:16,130 --> 00:02:20,400 Svo þú þarft ekki að pund eru einhverjar fleiri skrár líklega 47 00:02:20,400 --> 00:02:23,540 í því skyni að vinna með skrá ábendingum. 48 00:02:23,540 --> 00:02:29,980 >> Nú hvert einasta skrá músina virka, eða hvert einasta skrá I / O, inntak úttak 49 00:02:29,980 --> 00:02:33,310 virka, tekur eins og einn af breytum þess eða inntak 50 00:02:33,310 --> 00:02:35,822 skrá pointer-- nema fyrir einn, fopen, sem 51 00:02:35,822 --> 00:02:38,280 er það sem þú notar til að fá skrána bendi í fyrsta sæti. 52 00:02:38,280 --> 00:02:41,010 En eftir að þú hefur opnað skrá og þú færð skrá ábendingum, 53 00:02:41,010 --> 00:02:43,510 þú getur þá framhjá þeim sem rök á ýmsum aðgerðum 54 00:02:43,510 --> 00:02:46,720 við erum að fara að tala um í dag, eins og heilbrigður eins og margir aðrir 55 00:02:46,720 --> 00:02:48,520 þannig að þú getur unnið með skrár. 56 00:02:48,520 --> 00:02:50,980 >> Þannig að það eru sex falleg Sameiginlegar grundvallarreglur sjálfur 57 00:02:50,980 --> 00:02:52,870 sem við erum að fara að tala um í dag. 58 00:02:52,870 --> 00:02:57,160 fopen og félagi hans virka fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 og félagi virka fputc hennar, og fread og félagi hlutverk hennar, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Svo skulum við fá rétt inn í það. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- hvað þýðir það að gera? 63 00:03:07,050 --> 00:03:10,050 Jæja, opnar það skrána og það gefur þér skráar bendil á það, 64 00:03:10,050 --> 00:03:14,000 þannig að þú getur þá notað sem skrá bendillinn sem rök 65 00:03:14,000 --> 00:03:16,730 að einhverju öðru skrá I / O aðgerðir. 66 00:03:16,730 --> 00:03:19,100 Mikilvægasti hlutur að muna með fopen 67 00:03:19,100 --> 00:03:24,222 er að eftir að þú hefur opnað skrá eða hringdi eins og einn hér, 68 00:03:24,222 --> 00:03:26,930 þú þarft að ganga úr skugga um að bendillinn að þú fékkst til baka 69 00:03:26,930 --> 00:03:28,320 er ekki jafn null. 70 00:03:28,320 --> 00:03:31,320 Ef þú hefur ekki horft á vídeó á ábendingum, þetta gæti ekki skynsamleg. 71 00:03:31,320 --> 00:03:35,639 En ef þú reynir og dereference a null músina muna, 72 00:03:35,639 --> 00:03:38,180 program mun líklega þjást a skiptingu [inaudible]. 73 00:03:38,180 --> 00:03:40,540 Við viljum vera viss um að við fékk lögmæt músina aftur. 74 00:03:40,540 --> 00:03:43,665 Mikill meirihluti af the tími við munum hafa fengið réttmæta músina aftur 75 00:03:43,665 --> 00:03:45,280 og það mun ekki vera vandamál. 76 00:03:45,280 --> 00:03:46,760 >> Svo hvernig gera við að hringja til fopen? 77 00:03:46,760 --> 00:03:48,051 Það lítur mjög mikið eins og þetta. 78 00:03:48,051 --> 00:03:52,690 File stjörnu ptr-- PTR vera almenn nefna að skrá pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 og við fara í tvennt, skrá nafn og aðgerð við viljum takast á hendur. 80 00:03:57,300 --> 00:04:01,690 Svo héldum símtal sem lítur út eins this-- skrá stjörnu PTR 1 er fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 Og rekstur ég hef valið er r. 83 00:04:07,020 --> 00:04:08,639 >> Svo hvað finnst þér r er hér? 84 00:04:08,639 --> 00:04:11,180 Hvað eru tegundir af hlutum sem við gæti verið fær um að gera að skrá? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Svo er r rekstur sem við velja þegar við viljum að lesa skrána. 87 00:04:17,500 --> 00:04:20,260 Svo væri í rauninni þegar við að hringja svona 88 00:04:20,260 --> 00:04:25,440 vera að fá oss skráar bendil þannig að við gætum þá lesa upplýsingar 89 00:04:25,440 --> 00:04:27,770 frá file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Á sama hátt gætum við opnað skrána 2.txt til að skrifa og svo við getum framhjá ptr2, 91 00:04:34,190 --> 00:04:38,210 bendils ég hef búið hér, sem rök hvaða aðgerð sem 92 00:04:38,210 --> 00:04:40,080 skrifar upplýsingar í skrá. 93 00:04:40,080 --> 00:04:43,767 Og svipað skrifa, það er einnig kostur á að bæta, a. 94 00:04:43,767 --> 00:04:45,600 Munurinn á milli skrifa og appending 95 00:04:45,600 --> 00:04:50,920 vera að þegar þú skrifar í skrá, ef þú hringir til að fopen til skriftar 96 00:04:50,920 --> 00:04:54,761 og að skrá er þegar til, það er að fara að skrifa allan skrá. 97 00:04:54,761 --> 00:04:56,510 Það er að fara að byrja í upphafi, 98 00:04:56,510 --> 00:04:58,820 eyða öllum upplýsingum það er nú þegar. 99 00:04:58,820 --> 00:05:02,210 >> En ef þú opnar það fyrir að bæta við, það mun fara til the endir af the skrá 100 00:05:02,210 --> 00:05:04,340 ef það er þegar texti í það eða upplýsingar í það, 101 00:05:04,340 --> 00:05:06,040 og það verður þá að byrja skrifa þaðan. 102 00:05:06,040 --> 00:05:08,570 Svo þú munt ekki missa eitthvað af Upplýsingarnar sem þú hefur gert áður. 103 00:05:08,570 --> 00:05:12,110 Hvort sem þú vilt að skrifa eða bæta konar fer eftir aðstæðum. 104 00:05:12,110 --> 00:05:16,840 En þú munt sennilega vita hvað rétt aðgerð er þegar tíminn kemur. 105 00:05:16,840 --> 00:05:18,020 Svo er það fopen. 106 00:05:18,020 --> 00:05:18,930 >> Hvað um fclose? 107 00:05:18,930 --> 00:05:21,600 Jæja, nokkuð einfaldlega, fclose bara tekur bendils. 108 00:05:21,600 --> 00:05:24,000 Og eins og þú might búast við, það lokar að skrá. 109 00:05:24,000 --> 00:05:29,270 Og þegar við höfum lokað skrá, getum við ekki framkvæma meira skrá I / O aðgerðir, 110 00:05:29,270 --> 00:05:31,420 lesa eða skrifa, á að skrá. 111 00:05:31,420 --> 00:05:36,444 Við verðum að opna aftur skrá í annað sinn í röð 112 00:05:36,444 --> 00:05:38,610 að halda áfram að vinna með það að nota I / O aðgerðir. 113 00:05:38,610 --> 00:05:41,520 Svo fclose leið við erum búin vinna með þessa skrá. 114 00:05:41,520 --> 00:05:44,690 Og allt sem við þurfum að fara í er heiti skráar bendil. 115 00:05:44,690 --> 00:05:50,010 Svo á par renna síðan, við fopened skrá 1 punktur texta fyrir lestur 116 00:05:50,010 --> 00:05:52,854 og við úthlutað að skráar bendil á ptr1. 117 00:05:52,854 --> 00:05:55,020 Nú höfum við ákveðið að við erum búinn að lesa frá því skrá. 118 00:05:55,020 --> 00:05:56,561 Við þurfum ekki að gera eitthvað meira með það. 119 00:05:56,561 --> 00:05:58,890 Við getum bara fclose ptr1. 120 00:05:58,890 --> 00:06:01,950 Og sömuleiðis, gætum við fclose hinna. 121 00:06:01,950 --> 00:06:02,450 Allt í lagi. 122 00:06:02,450 --> 00:06:03,700 Svo það er að opna og loka. 123 00:06:03,700 --> 00:06:05,780 Þeir eru tveir helstu að hefja starfsemi. 124 00:06:05,780 --> 00:06:08,050 >> Nú viljum við í raun gera nokkrar áhugaverðar efni, 125 00:06:08,050 --> 00:06:11,940 og fyrsta fall sem við munum sjá að mun gera það er fgetc-- 126 00:06:11,940 --> 00:06:14,110 skrá fá staf. 127 00:06:14,110 --> 00:06:17,350 Það er það sem fgetc almennt myndi þýða að. 128 00:06:17,350 --> 00:06:20,190 Markmið hennar í lífinu er að lesa næsta staf, 129 00:06:20,190 --> 00:06:22,079 eða ef þetta er þinn mjög Fyrra símtalið til fgetc 130 00:06:22,079 --> 00:06:23,870 ákveðinnar skrár, fyrsta staf. 131 00:06:23,870 --> 00:06:26,210 En síðan eftir það, þú fá næsta einn, 132 00:06:26,210 --> 00:06:31,500 Strax næsta eðli að skrá, og geymir þær í eðli breytu. 133 00:06:31,500 --> 00:06:34,490 Eins og við höfum gert hér, bleikju ll jafngildir fgetc, 134 00:06:34,490 --> 00:06:36,389 fara í heiti skráar músina. 135 00:06:36,389 --> 00:06:38,180 Aftur, það er mjög mikilvægt hér að muna 136 00:06:38,180 --> 00:06:41,430 að til þess að hafa þessi aðgerð að ná árangri, 137 00:06:41,430 --> 00:06:45,690 bendils sjálft hlýtur verið opnuð fyrir lestur. 138 00:06:45,690 --> 00:06:50,589 Við getum ekki lesið staf úr skrá bendillinn að við opnuðum fyrir að skrifa. 139 00:06:50,589 --> 00:06:52,630 Svo er það einn af takmarkanir fopen, ekki satt? 140 00:06:52,630 --> 00:06:55,470 Við verðum að takmarka okkur aðeins að skila 141 00:06:55,470 --> 00:06:57,710 eina aðgerð með einum skrá músina. 142 00:06:57,710 --> 00:07:00,220 Ef við vildum að lesa og skrifa frá sömu skrá, 143 00:07:00,220 --> 00:07:03,840 við hefðum opinn tvö aðskilin skrá ábendingum til sama file-- 144 00:07:03,840 --> 00:07:05,670 einn fyrir lestur, einn fyrir að skrifa. 145 00:07:05,670 --> 00:07:08,400 >> Svo aftur, eina ástæðan Ég koma að allt nú er 146 00:07:08,400 --> 00:07:11,920 því ef við erum að fara að hringja að fgetc, sem skrá músina hlýtur að hafa 147 00:07:11,920 --> 00:07:14,172 verið opnuð fyrir lestur. 148 00:07:14,172 --> 00:07:15,880 Og þá nokkuð einfaldlega, allt sem við þurfum að gera 149 00:07:15,880 --> 00:07:17,546 er fara í nafni skráar bendil. 150 00:07:17,546 --> 00:07:21,060 Svo bleikju ll jafngildir fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> Það er að fara að fá okkur næsta character-- 152 00:07:23,200 --> 00:07:25,575 eða aftur, ef þetta er fyrsta skipti sem við höfum gert þessa kalla, 153 00:07:25,575 --> 00:07:29,750 fyrsta character-- af hvað skrá er bent á að með því að ptr1. 154 00:07:29,750 --> 00:07:32,210 Muna að það var skrá 1 punktur texta. 155 00:07:32,210 --> 00:07:36,490 Það verður að fá fyrsta staf sem og við munum geyma það í breytu ll. 156 00:07:36,490 --> 00:07:37,941 Frekar einfalt. 157 00:07:37,941 --> 00:07:40,190 Þannig að við höfum aðeins litið á þremur virka og þegar við 158 00:07:40,190 --> 00:07:43,070 getur gert eitthvað sniðugt. 159 00:07:43,070 --> 00:07:46,320 >> Þannig að ef við tökum þessa getu um að fá persónu 160 00:07:46,320 --> 00:07:48,943 og við lykkja it-- svo við halda áfram að fá stafi 161 00:07:48,943 --> 00:07:51,390 úr skrá yfir og yfir og over-- nú við 162 00:07:51,390 --> 00:07:54,500 getur lesið hvert einasta eðli skrá. 163 00:07:54,500 --> 00:07:58,670 Og ef við prentað hvert eðli strax eftir að við að lesa hana, 164 00:07:58,670 --> 00:08:01,960 við höfum nú lesið úr skrá og prentuð innihaldi hennar á skjánum. 165 00:08:01,960 --> 00:08:05,610 Við höfum í raun concatenated að skrá á skjánum. 166 00:08:05,610 --> 00:08:09,670 Og það er það sem Linux stjórn köttur gerir. 167 00:08:09,670 --> 00:08:13,250 >> Ef þú slærð köttinn í skrá nafn, það mun prenta út allt innihald 168 00:08:13,250 --> 00:08:15,160 af skrá í flugstöðinni gluggann. 169 00:08:15,160 --> 00:08:19,010 Og svo þetta litla lykkja hér, aðeins þrjár línur af kóða, 170 00:08:19,010 --> 00:08:23,270 en það afrit raun Linux stjórn köttur. 171 00:08:23,270 --> 00:08:25,210 Svo gæti þetta setningafræði líta svolítið skrítið, 172 00:08:25,210 --> 00:08:26,670 en hér er það sem er að gerast hér. 173 00:08:26,670 --> 00:08:31,460 Þó ll jafngildir fgetc, PTR er ekki jafnt EOF-- það er allt munnfylli, 174 00:08:31,460 --> 00:08:34,669 en við skulum brjóta hann niður bara svo það er ljóst á setningafræði. 175 00:08:34,669 --> 00:08:37,169 Ég hef steypt hana fyrir sakir pláss, 176 00:08:37,169 --> 00:08:39,049 þó það er lítið setningafræðilega erfiður. 177 00:08:39,049 --> 00:08:41,194 >> Þannig að þetta hluti í græna hægri nú, hvað er það að gera? 178 00:08:41,194 --> 00:08:42,860 Jæja, það er bara fgetc kalla okkar, ekki satt? 179 00:08:42,860 --> 00:08:44,530 Við höfum séð það áður. 180 00:08:44,530 --> 00:08:49,500 Það er að fá einn persóna úr skrá. 181 00:08:49,500 --> 00:08:53,220 Þá erum við saman að eðli gegn EOF. 182 00:08:53,220 --> 00:08:57,470 EOF er sérstakt gildi sem er og skilgreint er í venjulegu io.h, sem 183 00:08:57,470 --> 00:08:59,390 er endir skrá staf. 184 00:08:59,390 --> 00:09:03,450 Svo í rauninni hvað er að fara að gerast er þetta lykkja mun lesa staf, 185 00:09:03,450 --> 00:09:07,445 bera saman það til EOF er enda skrá staf. 186 00:09:07,445 --> 00:09:10,070 Ef þeir passa ekki, þannig að við höfum ekki náð í lok skrárinnar, 187 00:09:10,070 --> 00:09:11,490 við munum prenta þessi karakter út. 188 00:09:11,490 --> 00:09:13,740 Þá munum við fara aftur til upphaf lykkju aftur. 189 00:09:13,740 --> 00:09:18,310 Við munum fá til persónu, athuga gegn EOF, prenta það út, og svo framvegis 190 00:09:18,310 --> 00:09:21,094 og svo framvegis og svo framvegis, lykkja í gegnum þannig 191 00:09:21,094 --> 00:09:22,760 fyrr en við höfum náð í lok skrá. 192 00:09:22,760 --> 00:09:24,593 Og þá með þeim tímapunkti, við munum hafa prentað 193 00:09:24,593 --> 00:09:26,210 út allt innihald af the skrá. 194 00:09:26,210 --> 00:09:29,450 Svo aftur, höfum við aðeins séð fopen, fclose og fgetc 195 00:09:29,450 --> 00:09:34,950 og þegar við getum afrit a Linux flugstöðinni stjórn. 196 00:09:34,950 --> 00:09:38,850 >> Eins og ég sagði í upphafi, við höfðum fgetc og fputc, 197 00:09:38,850 --> 00:09:41,860 og fputc var félagi hlutverk fgetc. 198 00:09:41,860 --> 00:09:44,880 Og svo, eins og þú might ímynda sér, það er að skrifa jafngildi. 199 00:09:44,880 --> 00:09:49,440 Það gerir okkur kleift að skrifa einn staf í skrá. 200 00:09:49,440 --> 00:09:53,290 >> Again, hellir vera, bara eins og það var með fgetc, skrá 201 00:09:53,290 --> 00:09:56,660 sem við erum að skrifa til hlýt verið opnaði fyrir skriflega eða fyrir appending. 202 00:09:56,660 --> 00:10:00,820 Ef við reynum og nota fputc á skrá sem við höfum opnað fyrir lestur, 203 00:10:00,820 --> 00:10:02,760 við erum að fara að þjást smá mistök. 204 00:10:02,760 --> 00:10:04,440 En kallið er frekar einfalt. 205 00:10:04,440 --> 00:10:08,000 fputc höfuðborg A ptr2, allt það er að fara að gera er að það er 206 00:10:08,000 --> 00:10:12,040 að fara að skrifa bréf í A í skrá 2 punktur 207 00:10:12,040 --> 00:10:14,760 Textinn, sem hét því skrá sem við opnuðum og úthlutað 208 00:10:14,760 --> 00:10:17,280 bendillinn að ptr2. 209 00:10:17,280 --> 00:10:20,430 Þannig að við erum að fara að skrifa höfuðborg A til að skrá 2 punktur texta. 210 00:10:20,430 --> 00:10:24,592 Og við munum skrifa upphrópunarmerki benda til að skrá 3 punktur 211 00:10:24,592 --> 00:10:27,330 Textinn, sem var bent á að með því að ptr3. 212 00:10:27,330 --> 00:10:29,730 Svo aftur, frekar einfalt hér. 213 00:10:29,730 --> 00:10:32,727 >> En nú getum við gert annar hlutur. 214 00:10:32,727 --> 00:10:34,560 Við höfum þetta dæmi við vorum bara að fara yfir 215 00:10:34,560 --> 00:10:38,950 um að vera fær um að endurtaka köttinn Linux stjórn, sá sem prentar út 216 00:10:38,950 --> 00:10:40,500 á skjáinn. 217 00:10:40,500 --> 00:10:43,510 Jæja, nú þegar við höfum getu að lesa stafi og skrár 218 00:10:43,510 --> 00:10:46,590 og skrifa stafi í skrár, Hvers vegna eigum við ekki að skipta bara að 219 00:10:46,590 --> 00:10:50,720 kalla til printf með símtali til fputc. 220 00:10:50,720 --> 00:10:54,090 >> Og nú höfum við tvöfalt CP, mjög einfalt Linux stjórn 221 00:10:54,090 --> 00:10:59,100 sem við ræddum um leið langur síðan í Linux skipanir vídeó. 222 00:10:59,100 --> 00:11:01,070 Við höfum í raun tvöfalt það hérna. 223 00:11:01,070 --> 00:11:04,790 Við erum að lesa staf og þá erum við skrifa þessi karakter til aðra skrá. 224 00:11:04,790 --> 00:11:07,660 Lesa úr einni skrá, skrifa til annars, aftur og aftur 225 00:11:07,660 --> 00:11:11,350 og aftur þangað til við högg EOF. 226 00:11:11,350 --> 00:11:14,250 Við verðum að loka á skrá við erum að reyna að afrita úr. 227 00:11:14,250 --> 00:11:18,500 Og með því að við munum hafa skrifað allt af persónum sem við þurfum til að skrá 228 00:11:18,500 --> 00:11:19,500 sem við erum að skrifa í. 229 00:11:19,500 --> 00:11:24,270 Svo er þetta cp, Linux afrit stjórn. 230 00:11:24,270 --> 00:11:26,550 >> Í upphafi þetta video, ég hafði hellir 231 00:11:26,550 --> 00:11:29,840 að við myndum tala a svolítið um ábendingum. 232 00:11:29,840 --> 00:11:32,480 Hér er sérstaklega þar sem við erum að fara að tala um ábendingum 233 00:11:32,480 --> 00:11:34,800 auk skrá ábendingum. 234 00:11:34,800 --> 00:11:37,870 Svo þessi aðgerð lítur svona skelfilegt. 235 00:11:37,870 --> 00:11:39,120 Það fékk nokkrum þáttum. 236 00:11:39,120 --> 00:11:40,430 Það er mikið um að vera hér. 237 00:11:40,430 --> 00:11:42,760 There 'a einhver fjöldi af mismunandi liti og texta. 238 00:11:42,760 --> 00:11:47,100 En í raun, það er bara almenn útgáfa af fgetc 239 00:11:47,100 --> 00:11:50,110 sem gerir okkur kleift að fá eitthvað magn upplýsinga. 240 00:11:50,110 --> 00:11:53,560 Það getur verið svolítið óhagkvæm ef við erum fá stafina eitt í einu, 241 00:11:53,560 --> 00:11:55,770 iterating gegnum skrána einn staf í einu. 242 00:11:55,770 --> 00:12:00,230 Myndi það ekki vera ágætur að fá 100 á sama tíma eða 500 í einu? 243 00:12:00,230 --> 00:12:03,250 >> Jæja, fread og félagi hlutverk þess fwrite, sem við munum tala um 244 00:12:03,250 --> 00:12:05,490 í annað, leyfa okkur að gera einmitt þetta. 245 00:12:05,490 --> 00:12:08,480 Við getum lesið handahófi magn upplýsinga úr skrá 246 00:12:08,480 --> 00:12:10,290 og við geyma það einhvers staðar tímabundið. 247 00:12:10,290 --> 00:12:12,980 Í stað þess að vera fær um að bara passa hana í einni breytu, 248 00:12:12,980 --> 00:12:15,790 við gætum þurft að geyma það í fjölda. 249 00:12:15,790 --> 00:12:19,980 Og svo, fara við fjórum rök að fread-- músina 250 00:12:19,980 --> 00:12:23,940 á stað þar sem við erum að geyma upplýsingar, 251 00:12:23,940 --> 00:12:29,180 hversu stór hver eining upplýsinga verður, hversu margar einingar af upplýsingum 252 00:12:29,180 --> 00:12:35,192 við viljum að kaupa, og frá sem skrá við viljum fá þá. 253 00:12:35,192 --> 00:12:37,150 Sennilega best sýnt með dæmi hér. 254 00:12:37,150 --> 00:12:41,640 Svo skulum segja að við lýsa fjölbreytta 10 heiltölur. 255 00:12:41,640 --> 00:12:45,080 Við höfum bara lýst á stafla geðþótta int arr 10. 256 00:12:45,080 --> 00:12:46,970 Svo er það frekar einfalt. 257 00:12:46,970 --> 00:12:51,970 Nú er það sem við erum að gera þó að frecall er við erum að lesa stærð int 258 00:12:51,970 --> 00:12:54,180 sinnum 10 bæti af upplýsingum. 259 00:12:54,180 --> 00:12:59,040 Stærð int veru four-- það er stærð heiltölu c. 260 00:12:59,040 --> 00:13:02,790 >> Svo er það sem við erum að gera og við erum að lesa 40 bytes virði af upplýsingum 261 00:13:02,790 --> 00:13:05,850 úr skrá bent á að með því að PTR. 262 00:13:05,850 --> 00:13:08,600 Og við erum að geyma þá 40 bytes einhversstaðar 263 00:13:08,600 --> 00:13:12,080 þar sem við höfum sett til hliðar 40 bytes virði af minni. 264 00:13:12,080 --> 00:13:15,970 Sem betur fer, höfum við þegar gert það með því að lýsa hverfi, að array þarna. 265 00:13:15,970 --> 00:13:19,770 Það er fær um að halda 10 fjögurra bæti einingar. 266 00:13:19,770 --> 00:13:22,860 Svo í alls, það er hægt að halda 40 bytes virði af upplýsingum. 267 00:13:22,860 --> 00:13:26,540 Og við erum nú að lesa 40 bæti upplýsinga frá the skrá, 268 00:13:26,540 --> 00:13:30,330 og við erum að geyma það í samkl. 269 00:13:30,330 --> 00:13:35,470 >> Muna frá the vídeó á ábendingum sem nafn fylki, svo sem samkl, 270 00:13:35,470 --> 00:13:38,370 er í raun bara bendi í fyrsta þáttur þess. 271 00:13:38,370 --> 00:13:43,680 Svo þegar við framhjá í samkomulagi þar, við eru í raun brottför í músina. 272 00:13:43,680 --> 00:13:46,120 >> Á sama hátt getum við gert this-- við gerum ekki endilega 273 00:13:46,120 --> 00:13:51,200 þarf að vista biðminni okkar á mánudaginn. 274 00:13:51,200 --> 00:13:54,990 Við gætum einnig virk úthluta a biðminni svona með malloc. 275 00:13:54,990 --> 00:13:57,340 Mundu að þegar við virk úthluta minni, 276 00:13:57,340 --> 00:14:00,550 við erum að vista það á hrúga ekki stafla. 277 00:14:00,550 --> 00:14:02,110 En það er samt biðminni. 278 00:14:02,110 --> 00:14:06,810 >> Það enn, í þessu tilfelli, er halda 640 bæti af upplýsingum 279 00:14:06,810 --> 00:14:09,230 því tvöfaldur tekur upp átta bæti. 280 00:14:09,230 --> 00:14:11,570 Og við erum að biðja um 80 af þeim. 281 00:14:11,570 --> 00:14:13,770 Við viljum hafa pláss að halda 80 tvöfaldar. 282 00:14:13,770 --> 00:14:17,210 Svo 80 sinnum 8 er 640 bæti upplýsingar. 283 00:14:17,210 --> 00:14:21,880 Og að kalla að fread er safna 640 bæti af upplýsingum 284 00:14:21,880 --> 00:14:27,770 frá skrá benti til eftir PTR og geyma það nú í arr2. 285 00:14:27,770 --> 00:14:32,770 >> Nú getum við einnig að meðhöndla fread bara eins og kalla til fgetc. 286 00:14:32,770 --> 00:14:37,140 Í þessu tilfelli erum við bara að reyna að fá einn staf af skrá. 287 00:14:37,140 --> 00:14:40,070 Og við þurfum ekki array að halda karakter. 288 00:14:40,070 --> 00:14:43,170 Við getum bara geyma það í eðli breyta. 289 00:14:43,170 --> 00:14:46,390 >> Veiða, þó, er að þegar við höfum bara breytu, 290 00:14:46,390 --> 00:14:50,290 við þurfum að fara í heimilisfang breytunni 291 00:14:50,290 --> 00:14:52,550 vegna muna að Fyrsta rök að fread 292 00:14:52,550 --> 00:14:59,210 er bendi á staðsetningu og minni þar sem við viljum geyma upplýsingar. 293 00:14:59,210 --> 00:15:01,550 Again, nafn sem array er bendi. 294 00:15:01,550 --> 00:15:04,200 Þannig að við þurfum ekki að gera merkið fylkisins. 295 00:15:04,200 --> 00:15:07,270 En c, eðli c hér, er ekki fylki. 296 00:15:07,270 --> 00:15:08,390 Það er bara breyta. 297 00:15:08,390 --> 00:15:11,840 Og svo þurfum við að fara að merkið c að kynna 298 00:15:11,840 --> 00:15:15,350 að það er netfang þar sem við viljum til að geyma eitt bæti af upplýsingum, 299 00:15:15,350 --> 00:15:20,479 þetta einn staf sem við erum að safna frá PTR. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- Ég fer í gegnum þetta aðeins meira 301 00:15:22,270 --> 00:15:25,440 quickly-- er laglegur mikill the Nákvæm jafnvirði fread 302 00:15:25,440 --> 00:15:27,720 nema það er til að skrifa á í stað þess að lesa bara 303 00:15:27,720 --> 00:15:31,610 eins og other-- við höfum haft opið og loka, fá staf, 304 00:15:31,610 --> 00:15:32,530 skrifa staf. 305 00:15:32,530 --> 00:15:35,040 Nú er það að fá handahófskennt magn upplýsinga, 306 00:15:35,040 --> 00:15:37,170 rétt handahófskennt magn upplýsinga. 307 00:15:37,170 --> 00:15:39,790 Svo bara eins og áður, við getum hafa fjölbreytta 10 heiltölur 308 00:15:39,790 --> 00:15:43,210 þar sem við höfum nú þegar upplýsingar sem geymdar eru, kannski. 309 00:15:43,210 --> 00:15:46,580 >> Það var líklega nokkrar línur af kóða sem ætti að fara á milli þessara tveggja 310 00:15:46,580 --> 00:15:49,990 þar sem ég fylla samkomulagi við eitthvað þroskandi. 311 00:15:49,990 --> 00:15:51,880 Ég fylla það með 10 mismunandi heiltölur. 312 00:15:51,880 --> 00:15:54,920 Og í staðinn, það sem ég er að gera er að skrifa frá samkomulagi 313 00:15:54,920 --> 00:15:58,600 og safna upplýsingum frá samkl. 314 00:15:58,600 --> 00:16:02,390 Og ég ætla að taka þessar upplýsingar og setja það inn í skrána. 315 00:16:02,390 --> 00:16:05,410 >> Svo í stað þess að það sé frá skrána í buffer, 316 00:16:05,410 --> 00:16:08,790 við erum nú að fara frá biðminni til að skrá. 317 00:16:08,790 --> 00:16:10,580 Svo er það bara hið gagnstæða. 318 00:16:10,580 --> 00:16:16,680 Svo aftur, bara eins og áður, við getum einnig hafa hrúga klumpur af minni 319 00:16:16,680 --> 00:16:19,600 sem við höfum virk úthlutað og lesa frá því 320 00:16:19,600 --> 00:16:21,570 og skrifa að skránni. 321 00:16:21,570 --> 00:16:24,900 >> Og við höfum einnig einn breytu fær um að halda eitt bæti 322 00:16:24,900 --> 00:16:27,200 upplýsinga, svo sem persónu. 323 00:16:27,200 --> 00:16:29,830 En aftur, við þurfum að fara í veffang breytunni 324 00:16:29,830 --> 00:16:31,840 þegar við viljum til að lesa úr því. 325 00:16:31,840 --> 00:16:35,280 Þannig að við getum skrifað upplýsingar við finnum á þetta netfang 326 00:16:35,280 --> 00:16:39,050 að skrá músina, PTR. 327 00:16:39,050 --> 00:16:41,630 >> Það er hellingur af öðrum mikill skrá I / O aðgerðir 328 00:16:41,630 --> 00:16:44,650 að gera ýmislegt fyrir utan þær sem við höfum talað um í dag. 329 00:16:44,650 --> 00:16:46,450 A par af þeim sem þú gætir fundið gagnlegar 330 00:16:46,450 --> 00:16:50,840 eru fgets og fputs, sem eru ígildi 331 00:16:50,840 --> 00:16:56,190 af fgetc og fputc en að lesa einum streng úr skrá. 332 00:16:56,190 --> 00:16:59,020 Í stað þess að einni persónu, það verður að lesa heilt band. 333 00:16:59,020 --> 00:17:02,940 fprintf, sem í grundvallaratriðum gerir þú þarft að nota printf að skrifa í skrána. 334 00:17:02,940 --> 00:17:05,619 Svo bara eins og þú getur gert það breyta skipting með 335 00:17:05,619 --> 00:17:09,900 sem tákn prósent i og prósent d, og svo framvegis, með printf 336 00:17:09,900 --> 00:17:14,690 þú getur álíka tekið printf string og prenta eitthvað 337 00:17:14,690 --> 00:17:16,800 svona í skrá. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- ef þú ert með DVD spilara er hliðstæðan sem ég nota venjulega here-- 339 00:17:20,720 --> 00:17:23,109 er tegund af eins og með þinn baka og fljótur fram 340 00:17:23,109 --> 00:17:25,819 hnappa til að fletta í myndinni. 341 00:17:25,819 --> 00:17:28,369 Á sama hátt getur þú fært um skrá. 342 00:17:28,369 --> 00:17:30,250 Eitt af því sem inni að skrá uppbygging 343 00:17:30,250 --> 00:17:34,270 sem c skapar fyrir þig er vísbending því hvar þú ert í skránni. 344 00:17:34,270 --> 00:17:36,420 Ert þú á mjög upphaf, bæti núll? 345 00:17:36,420 --> 00:17:39,290 Ert þú á bæti 100, bæti 1000, og svo framvegis? 346 00:17:39,290 --> 00:17:44,340 Þú getur notað fseek að geðþótta færa sem vísir áfram eða afturábak. 347 00:17:44,340 --> 00:17:46,744 >> Og ftell aftur svipað DVD spilara, 348 00:17:46,744 --> 00:17:49,660 er eins og lítið klukka sem segir hversu margar mínútur og sekúndur þú 349 00:17:49,660 --> 00:17:52,480 eru í tiltekinni bíómynd. 350 00:17:52,480 --> 00:17:56,990 Á sama hátt, ftell segir þér hvernig margir bæti þú ert inn í skrána. 351 00:17:56,990 --> 00:18:00,210 feof er öðruvísi útgáfa um að greina hvort þú hafir 352 00:18:00,210 --> 00:18:01,700 náð í lok skrárinnar. 353 00:18:01,700 --> 00:18:03,600 Og ferror er fall að þú getur notað 354 00:18:03,600 --> 00:18:06,959 að greina hvort eitthvað hefur farið úrskeiðis vinna með skrá. 355 00:18:06,959 --> 00:18:08,750 Aftur, þetta er bara klóra yfirborðið. 356 00:18:08,750 --> 00:18:12,730 Það er enn nóg meira skrá I / O aðgerðir í stöðluðu io.h. 357 00:18:12,730 --> 00:18:16,620 En þetta mun sennilega fá þér byrjaði að vinna með skrá ábendingum. 358 00:18:16,620 --> 00:18:17,640 Ég er Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 Þetta er CS50. 360 00:18:19,750 --> 00:18:21,669