1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> SPEAKER: Do sedaj, je verjetno, da je večina vaših programov 3 00:00:07,870 --> 00:00:10,170 so bili malo kratkotrajen. 4 00:00:10,170 --> 00:00:13,310 Zaženete program, kot Mario ali požrešen. 5 00:00:13,310 --> 00:00:17,350 To počne nekaj, kar je morda pozove uporabnik nekaj informacij, 6 00:00:17,350 --> 00:00:20,400 natisniti nekaj izhod na zaslonu, potem pa, ko je vaš program je več, 7 00:00:20,400 --> 00:00:23,252 pa je res ni dokazov, da je bilo vedno deluje v prvi vrsti. 8 00:00:23,252 --> 00:00:25,960 Mislim, seveda, lahko so zapustili odpreti v terminalskem oknu 9 00:00:25,960 --> 00:00:29,770 ampak če počistite zaslon, tam je res ni dokazov, da je obstajala. 10 00:00:29,770 --> 00:00:33,720 Nimamo kot sredstvo za shranjevanje obstojne informacije, informacije 11 00:00:33,720 --> 00:00:36,890 da obstaja po najinem Program je ustavil teče, 12 00:00:36,890 --> 00:00:39,241 ali imamo ne do te točke. 13 00:00:39,241 --> 00:00:41,490 Na srečo, čeprav, c pa Posredujte nam s sposobnostjo 14 00:00:41,490 --> 00:00:44,220 da to storijo z izvajanjem nekaj, kar se imenuje 15 00:00:44,220 --> 00:00:48,330 datoteka, struktura, ki v bistvu pomeni datoteko, ki bi jo podvojilo 16 00:00:48,330 --> 00:00:53,826 kliknite na računalniku, če ste uporablja za grafični uporabniški okolje. 17 00:00:53,826 --> 00:00:55,700 Na splošno pri delu s C, smo dejansko 18 00:00:55,700 --> 00:00:59,965 bo treba delati z kazalci za files-- datoteko stars-- 19 00:00:59,965 --> 00:01:02,090 razen za malo ko govorimo o paru 20 00:01:02,090 --> 00:01:04,560 funkcij, ki delo z datotek kazalci. 21 00:01:04,560 --> 00:01:08,990 Vam ni treba, da so res izkopali pregloboko v razumevanje kazalcev 22 00:01:08,990 --> 00:01:09,730 sami. 23 00:01:09,730 --> 00:01:12,870 Tam je malo poskočno bit kjer bomo govorili o njih, 24 00:01:12,870 --> 00:01:18,090 ampak na splošno datoteko napotke in kazalci, medtem ko so med seboj povezani, 25 00:01:18,090 --> 00:01:20,290 niso natanko ista stvar. 26 00:01:20,290 --> 00:01:22,440 >> Zdaj kaj mislim, ko Pravim trajnih podatkov? 27 00:01:22,440 --> 00:01:23,650 Kaj je obstojna podatki? 28 00:01:23,650 --> 00:01:25,232 Zakaj nas skrbi glede tega? 29 00:01:25,232 --> 00:01:27,190 Reči, na primer, da tečete program 30 00:01:27,190 --> 00:01:29,850 ali ste prepisovati Program, ki je igra, 31 00:01:29,850 --> 00:01:32,960 in želite slediti vseh uporabnikovih potez 32 00:01:32,960 --> 00:01:36,620 tako da morda, če gre kaj narobe, si lahko ogledate datoteko po tekmi. 33 00:01:36,620 --> 00:01:39,970 To je tisto, kar mislimo, ko govorimo o obstojnih podatkov. 34 00:01:39,970 --> 00:01:43,930 >> V teku teče vaš Program se ustvari datoteko. 35 00:01:43,930 --> 00:01:45,680 In ko je vaš program je ustavil teče, 36 00:01:45,680 --> 00:01:48,689 da je datoteka še vedno obstaja na vašem sistemu. 37 00:01:48,689 --> 00:01:50,230 In bomo lahko ogledate na njem in ga preuči. 38 00:01:50,230 --> 00:01:53,670 In tako da bi program nastavljen na so ustvarili nekaj trajnih podatkov, 39 00:01:53,670 --> 00:01:57,390 obstajajo podatki po programu je končal tekmovanje v teku. 40 00:01:57,390 --> 00:02:02,320 >> Zdaj vse te funkcije, ki delajo z ustvarjanjem datotek in manipulacijo 41 00:02:02,320 --> 00:02:04,940 jim na različne načine živijo v standardni io.h, 42 00:02:04,940 --> 00:02:08,210 ki je datoteka glava, ki ki ste jih verjetno že pound 43 00:02:08,210 --> 00:02:10,910 vključno na vrhu precej veliko vse svoje programe 44 00:02:10,910 --> 00:02:14,130 ker vsebuje eno izmed večina uporabnih funkcij za nas, 45 00:02:14,130 --> 00:02:16,130 printf, ki prav tako omogoča živi v standardnem io.h. 46 00:02:16,130 --> 00:02:20,400 Torej vam ni treba, da melje vključujejo morebitne dodatne datoteke verjetno 47 00:02:20,400 --> 00:02:23,540 da bi delo z datotek kazalci. 48 00:02:23,540 --> 00:02:29,980 >> Zdaj vsak funkcija datoteka kazalec, ali posamezna datoteka I / O, input output 49 00:02:29,980 --> 00:02:33,310 Funkcija, sprejema kot enega njegovih parametrov ali vložki 50 00:02:33,310 --> 00:02:35,822 datoteka pointer-- razen za eno, fopen, ki 51 00:02:35,822 --> 00:02:38,280 je tisto, kar boste uporabili, da bi dobili datoteko kazalec na prvem mestu. 52 00:02:38,280 --> 00:02:41,010 Toda, ko ste jih odprli datoteko in dobili boste datoteko kazalce, 53 00:02:41,010 --> 00:02:43,510 lahko nato mimo njih, kot je argumenti različnih funkcij 54 00:02:43,510 --> 00:02:46,720 bomo govorili o danes, kot tudi mnoge druge 55 00:02:46,720 --> 00:02:48,520 tako da lahko delate z datotekami. 56 00:02:48,520 --> 00:02:50,980 >> Torej, obstaja šest precej skupna osnovna tisti 57 00:02:50,980 --> 00:02:52,870 da bomo danes govorili. 58 00:02:52,870 --> 00:02:57,160 fopen in njen spremljevalec Funkcija fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 in njegova funkcija spremljevalec fputc, in fread in njen spremljevalec funkcijo, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Torej, kaj je dobil naravnost vanjo. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- kaj počne? 63 00:03:07,050 --> 00:03:10,050 No, to odpre datoteko in jo vam datotečni kazalec na njej, 64 00:03:10,050 --> 00:03:14,000 tako da lahko nato uporabite, da datoteke kazalec kot argument 65 00:03:14,000 --> 00:03:16,730 katerokoli drugo datoteko I / O funkcije. 66 00:03:16,730 --> 00:03:19,100 Najbolj pomembna stvar da se spomnimo z fopen 67 00:03:19,100 --> 00:03:24,222 je, da po tem, ko ste odprli vložiti ali je klic, kot tistega, tukaj, 68 00:03:24,222 --> 00:03:26,930 morate preverite, da je kazalec, da si dobil nazaj 69 00:03:26,930 --> 00:03:28,320 ni enaka nič. 70 00:03:28,320 --> 00:03:31,320 Če še niste gledal video na kazalci, to ne bi bilo smiselno. 71 00:03:31,320 --> 00:03:35,639 Ampak, če ste poskušali in dereference null kazalec odpoklic, 72 00:03:35,639 --> 00:03:38,180 vaš program bo najverjetneje trpel segmentacijo [neslišno]. 73 00:03:38,180 --> 00:03:40,540 Želimo zagotoviti, da bomo dobil legitimno kazalec nazaj. 74 00:03:40,540 --> 00:03:43,665 Velika bomo večino časa gotten legitimno kazalec nazaj 75 00:03:43,665 --> 00:03:45,280 in da ne bo problem. 76 00:03:45,280 --> 00:03:46,760 >> Torej, kako narediti klic fopen? 77 00:03:46,760 --> 00:03:48,051 Videti je precej všeč. 78 00:03:48,051 --> 00:03:52,690 Datoteka zvezda ptr-- PTR pa generično ime za datoteko pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 in se peljemo v dveh stvareh, ime datoteke in operacija želimo opraviti. 80 00:03:57,300 --> 00:04:01,690 Torej, morda imamo klic, ki izgleda kot this-- datoteka zvezda ptr 1 enaka fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 In operacija sem izbral, je r. 83 00:04:07,020 --> 00:04:08,639 >> Torej, kaj misliš, da je r tu? 84 00:04:08,639 --> 00:04:11,180 Katere so vrste stvari, ki smo bi mogli storiti, da bi datoteke? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Torej r je operacija, ki smo izbrati, če želimo, da se glasi datoteke. 87 00:04:17,500 --> 00:04:20,260 Torej bi mi v bistvu, ko smo klic, kot je ta 88 00:04:20,260 --> 00:04:25,440 se sami dobili datotečni kazalec tako, da smo lahko nato bere informacijo 89 00:04:25,440 --> 00:04:27,770 od file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Podobno bi lahko odprete datoteke 2.txt za pisanje in da bomo lahko mimo ptr2, 91 00:04:34,190 --> 00:04:38,210 kazalec datoteka sem tu ustvaril, kot argument koli funkcije, ki 92 00:04:38,210 --> 00:04:40,080 piše podatke v datoteko. 93 00:04:40,080 --> 00:04:43,767 In podobno kot pisanje, tam je tudi možnost, da pripnemo, a. 94 00:04:43,767 --> 00:04:45,600 Razlika med pisanje in slepič 95 00:04:45,600 --> 00:04:50,920 je, da ko pišete na datoteko, če kličete na fopen za pisanje 96 00:04:50,920 --> 00:04:54,761 in da datoteka že obstaja, je gre prepisati celoten spis. 97 00:04:54,761 --> 00:04:56,510 To se dogaja, da začnete na samem začetku, 98 00:04:56,510 --> 00:04:58,820 brisanje vseh podatkov da je že tam. 99 00:04:58,820 --> 00:05:02,210 >> Ker če jo odprete za slepič, da bo šla do konca spisa 100 00:05:02,210 --> 00:05:04,340 če je že tekst v to, ali podatki v njej, 101 00:05:04,340 --> 00:05:06,040 in da bo nato začela pisati od tam. 102 00:05:06,040 --> 00:05:08,570 Tako ne boste izgubili koli od Podatki, ki ste jih naredili prej. 103 00:05:08,570 --> 00:05:12,110 Ali želite pisati ali dodajte nekako odvisno od razmer. 104 00:05:12,110 --> 00:05:16,840 Vendar boste verjetno veste, kaj je Pravica delovanje je, ko pride čas. 105 00:05:16,840 --> 00:05:18,020 Tako da je fopen. 106 00:05:18,020 --> 00:05:18,930 >> Kaj fclose? 107 00:05:18,930 --> 00:05:21,600 No, zelo preprosto, fclose samo sprejema datoteke kazalec. 108 00:05:21,600 --> 00:05:24,000 In kot bi lahko pričakovali, zapre datoteko. 109 00:05:24,000 --> 00:05:29,270 In ko smo zaprli datoteko, ne moremo opravlja vse večjo datoteko I / O funkcije, 110 00:05:29,270 --> 00:05:31,420 branje ali pisanje, na tej datoteki. 111 00:05:31,420 --> 00:05:36,444 Moramo ponovno odpreti vložiti še čas, da bi 112 00:05:36,444 --> 00:05:38,610 še naprej sodelovati z je z uporabo I / O funkcije. 113 00:05:38,610 --> 00:05:41,520 Torej fclose sredstva bomo storili ki delajo s to datoteko. 114 00:05:41,520 --> 00:05:44,690 In vse, kar potrebujemo, da prenese v je ime datoteke kazalca. 115 00:05:44,690 --> 00:05:50,010 Torej na par drsi nazaj, smo fopened datotek 1 pika besedilo za branje 116 00:05:50,010 --> 00:05:52,854 in mi dodeli, da datoteke kazalec na ptr1. 117 00:05:52,854 --> 00:05:55,020 Zdaj smo se odločili, da smo storiti branju iz te datoteke. 118 00:05:55,020 --> 00:05:56,561 Nam ni treba storiti nič več z njo. 119 00:05:56,561 --> 00:05:58,890 Mi lahko samo fclose ptr1. 120 00:05:58,890 --> 00:06:01,950 In podobno, lahko smo fclose druge narave. 121 00:06:01,950 --> 00:06:02,450 V redu. 122 00:06:02,450 --> 00:06:03,700 Tako da je odpiranje in zapiranje. 123 00:06:03,700 --> 00:06:05,780 To sta dva osnovna zagonom. 124 00:06:05,780 --> 00:06:08,050 >> Sedaj želimo dejansko naredite nekaj zanimivih stvari, 125 00:06:08,050 --> 00:06:11,940 in prva naloga, da bomo glej, da bo naredil, da je fgetc-- 126 00:06:11,940 --> 00:06:14,110 vložiti dobili značaj. 127 00:06:14,110 --> 00:06:17,350 To je tisto, kar fgetc splošno bi pomenilo. 128 00:06:17,350 --> 00:06:20,190 Njen cilj v življenju je, da preberite naslednji znak, 129 00:06:20,190 --> 00:06:22,079 ali, če je to vaš zelo Prvi klic na fgetc 130 00:06:22,079 --> 00:06:23,870 za določeno datoteko, je prvi znak. 131 00:06:23,870 --> 00:06:26,210 Potem pa po tem, boste dobili naslednjo, 132 00:06:26,210 --> 00:06:31,500 že naslednji značaj te datoteke, in ga shrani v spremenljivko znakov. 133 00:06:31,500 --> 00:06:34,490 Kot smo tukaj naredili, char ch enaka fgetc, 134 00:06:34,490 --> 00:06:36,389 preide v imenu datoteke kazalca. 135 00:06:36,389 --> 00:06:38,180 Še enkrat, to je zelo pomembno, da se spomnimo 136 00:06:38,180 --> 00:06:41,430 da bi imeli ta operacija uspe, 137 00:06:41,430 --> 00:06:45,690 sama datoteka kazalec Gotovo bila odprta za branje. 138 00:06:45,690 --> 00:06:50,589 Ne moremo prebrati znak iz datoteke kazalec, da smo odprli za pisanje. 139 00:06:50,589 --> 00:06:52,630 Tako, da je eden izmed omejitve fopen, kajne? 140 00:06:52,630 --> 00:06:55,470 Moramo omejiti sami, da le opravlja 141 00:06:55,470 --> 00:06:57,710 ena operacija z eno datoteko kazalcem. 142 00:06:57,710 --> 00:07:00,220 Če smo želeli, da se glasi, in pisati iz iste datoteke, 143 00:07:00,220 --> 00:07:03,840 bi imeli odprt dve ločeni datotek kazalci na istem file-- 144 00:07:03,840 --> 00:07:05,670 eden za branje, eno za pisanje. 145 00:07:05,670 --> 00:07:08,400 >> Torej še enkrat, edini razlog, Jaz bi, da je do sedaj 146 00:07:08,400 --> 00:07:11,920 ker če bomo za klic da fgetc, da datoteka kazalec Gotovo 147 00:07:11,920 --> 00:07:14,172 bila odprta za branje. 148 00:07:14,172 --> 00:07:15,880 In potem zelo preprosto, vse, kar morate storiti, 149 00:07:15,880 --> 00:07:17,546 se prenese na ime datotečnega kazalca. 150 00:07:17,546 --> 00:07:21,060 Torej char ch enaka fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> To se dogaja, da naju Naslednji character-- 152 00:07:23,200 --> 00:07:25,575 ali še enkrat, če je to prva čas smo naredili ta klic, 153 00:07:25,575 --> 00:07:29,750 prvi character-- kateregakoli Datoteka je poudaril, da ga ptr1. 154 00:07:29,750 --> 00:07:32,210 Spomnimo se, da je to datoteka 1 pika besedilo. 155 00:07:32,210 --> 00:07:36,490 To bomo dobili prvi znak, da je in bomo jo shranite v spremenljivko ch. 156 00:07:36,490 --> 00:07:37,941 Precej preprosta. 157 00:07:37,941 --> 00:07:40,190 Tako smo si ogledali le na treh funkcije in že smo 158 00:07:40,190 --> 00:07:43,070 Lahko narediš nekaj zelo čeden. 159 00:07:43,070 --> 00:07:46,320 >> Torej, če vzamemo to sposobnost dobili znak 160 00:07:46,320 --> 00:07:48,943 in mi zanka tako it-- smo naprej, da bi dobili znake 161 00:07:48,943 --> 00:07:51,390 iz datoteke znova in več in over-- zdaj smo 162 00:07:51,390 --> 00:07:54,500 lahko prebere vsak značaj datoteko. 163 00:07:54,500 --> 00:07:58,670 In če bomo natisniti vsak znak Takoj po tem, ko smo ga prebrali, 164 00:07:58,670 --> 00:08:01,960 smo zdaj brati iz datoteke in tiskani njeno vsebino na zaslonu. 165 00:08:01,960 --> 00:08:05,610 Mi smo dejansko združena z verigo da je datoteka na zaslonu. 166 00:08:05,610 --> 00:08:09,670 In to je tisto, kar Linux ukaz cat počne. 167 00:08:09,670 --> 00:08:13,250 >> Če vnesete mačka v imenu datoteke je, bo izpisal celotno vsebino 168 00:08:13,250 --> 00:08:15,160 datoteke v vašem terminalsko okno. 169 00:08:15,160 --> 00:08:19,010 In tako ta mali zanka tukaj, le tri vrstice kode, 170 00:08:19,010 --> 00:08:23,270 vendar dejansko podvaja ukaz cat Linux. 171 00:08:23,270 --> 00:08:25,210 Torej, to sintakso morda poglej malo čudno, 172 00:08:25,210 --> 00:08:26,670 ampak tukaj je, kaj se tukaj dogaja. 173 00:08:26,670 --> 00:08:31,460 Medtem ch enaka fgetc, PTR ni enako EOF-- je cela zalogaja, 174 00:08:31,460 --> 00:08:34,669 ampak kaj je prekinil dol samo tako da je jasno, o skladnji. 175 00:08:34,669 --> 00:08:37,169 Sem jo konsolidirajo zaradi omejenega prostora 176 00:08:37,169 --> 00:08:39,049 čeprav je malo skladenjsko zapleteno. 177 00:08:39,049 --> 00:08:41,194 >> Torej, ta del v zeleni pravice Zdaj, kaj počne? 178 00:08:41,194 --> 00:08:42,860 No, to je samo naša fgetc klic, kajne? 179 00:08:42,860 --> 00:08:44,530 Videli smo, da je pred. 180 00:08:44,530 --> 00:08:49,500 To je pridobivanje enega lik iz spisa. 181 00:08:49,500 --> 00:08:53,220 Potem smo primerjajte značaj proti EOF. 182 00:08:53,220 --> 00:08:57,470 EOF je posebna vrednost, ki je opredeljeno v standardu io.h, ki 183 00:08:57,470 --> 00:08:59,390 je konec datoteke značaja. 184 00:08:59,390 --> 00:09:03,450 Torej v bistvu, kaj se bo zgodilo se bo ta zanka prebrati znak, 185 00:09:03,450 --> 00:09:07,445 ga primerjajte z EOF je konec datoteke značaja. 186 00:09:07,445 --> 00:09:10,070 Če se ne ujemajo, tako da imamo ne dosegel konec datoteke, 187 00:09:10,070 --> 00:09:11,490 bomo natisnite ta lik ven. 188 00:09:11,490 --> 00:09:13,740 Potem smo šli nazaj na začetkom zanke znova. 189 00:09:13,740 --> 00:09:18,310 Bomo dobili znak, preverite proti EOF, ga natisnite, in tako naprej 190 00:09:18,310 --> 00:09:21,094 in tako naprej in tako naprej, zanka skozi ta način 191 00:09:21,094 --> 00:09:22,760 dokler ne bomo prišli do konca datoteke. 192 00:09:22,760 --> 00:09:24,593 In potem ga v tej točki, Vam bo natisnjen 193 00:09:24,593 --> 00:09:26,210 iz celotne vsebine datoteke. 194 00:09:26,210 --> 00:09:29,450 Torej še enkrat, smo videli samo fopen, fclose in fgetc 195 00:09:29,450 --> 00:09:34,950 in že smo lahko dvojnik terminal ukaz Linux. 196 00:09:34,950 --> 00:09:38,850 >> Kot sem rekel na začetku, smo imeli fgetc in fputc, 197 00:09:38,850 --> 00:09:41,860 in fputc bil spremljevalec funkcija fgetc. 198 00:09:41,860 --> 00:09:44,880 In tako, kot si lahko predstavljate, je enakovredno pisanje. 199 00:09:44,880 --> 00:09:49,440 To nam omogoča, da napišete sam znak v datoteko. 200 00:09:49,440 --> 00:09:53,290 >> Again, opozorilo pa, samo tako kot je bilo z fgetc, datoteka 201 00:09:53,290 --> 00:09:56,660 da smo pisno Gotovo je odpreti za pisanje ali za slepič. 202 00:09:56,660 --> 00:10:00,820 Če bomo poskušali uporabiti fputc na datoteko da smo odprli za branje, 203 00:10:00,820 --> 00:10:02,760 bomo trpeli malo napako. 204 00:10:02,760 --> 00:10:04,440 Toda klic je zelo preprosta. 205 00:10:04,440 --> 00:10:08,000 fputc kapitalska ptr2 vse da se dogaja, da storiti, je, da je 206 00:10:08,000 --> 00:10:12,040 dogaja, da napišete pismo v A v datoteki 2 piki 207 00:10:12,040 --> 00:10:14,760 besedilo, ki je ime izmed datoteko, da smo odprli in dodeljena 208 00:10:14,760 --> 00:10:17,280 kazalec ptr2. 209 00:10:17,280 --> 00:10:20,430 Torej bomo napisati Kapital A do datoteke 2 dot besedilo. 210 00:10:20,430 --> 00:10:24,592 In bomo napisati vzklik kažejo na datoteko 3 dot 211 00:10:24,592 --> 00:10:27,330 Besedilo, ki ga je opozoril, da ga ptr3. 212 00:10:27,330 --> 00:10:29,730 Torej še enkrat, precej preprosta tukaj. 213 00:10:29,730 --> 00:10:32,727 >> Zdaj pa lahko storimo še ena stvar. 214 00:10:32,727 --> 00:10:34,560 Imamo ta primer smo le, da bo več 215 00:10:34,560 --> 00:10:38,950 o tem, da bi lahko posnemati mačka Linux ukaz, tisti, ki natisne 216 00:10:38,950 --> 00:10:40,500 na zaslon. 217 00:10:40,500 --> 00:10:43,510 No, zdaj, ko imamo možnost, za branje znakov iz datoteke 218 00:10:43,510 --> 00:10:46,590 in pisati znake datotek zakaj ne bomo samo nadomestek, ki 219 00:10:46,590 --> 00:10:50,720 pokličite na printf s pozivom, naj fputc. 220 00:10:50,720 --> 00:10:54,090 >> In zdaj smo podvojene CP ukaz zelo osnovni Linux 221 00:10:54,090 --> 00:10:59,100 da smo se pogovarjali o tako dolgo nazaj na Linux ukazi video. 222 00:10:59,100 --> 00:11:01,070 Dejansko smo jih podvojiti, da prav tukaj. 223 00:11:01,070 --> 00:11:04,790 Mi berete znak in potem smo pisanje to znak druge datoteke. 224 00:11:04,790 --> 00:11:07,660 Branje iz ene datoteke, pisanje v drugo, znova in znova 225 00:11:07,660 --> 00:11:11,350 in znova, dokler ne bomo zadeli EOF. 226 00:11:11,350 --> 00:11:14,250 Imamo do konca datoteko smo poskušali kopirati. 227 00:11:14,250 --> 00:11:18,500 In da bomo bili napisani vsi znakov moramo spisa 228 00:11:18,500 --> 00:11:19,500 da smo pisno. 229 00:11:19,500 --> 00:11:24,270 Torej, to je cp, ukaz copy Linux. 230 00:11:24,270 --> 00:11:26,550 >> Na samem začetku ta video, sem imel opozorilo 231 00:11:26,550 --> 00:11:29,840 da bi talk malo o kazalci. 232 00:11:29,840 --> 00:11:32,480 Tu je še posebej, kadar smo govorili o kazalcev 233 00:11:32,480 --> 00:11:34,800 Poleg tega, da vloži kazalce. 234 00:11:34,800 --> 00:11:37,870 Torej ta funkcija izgleda nekako strašljivo. 235 00:11:37,870 --> 00:11:39,120 Ima več parametrov. 236 00:11:39,120 --> 00:11:40,430 Tam je veliko dogaja. 237 00:11:40,430 --> 00:11:42,760 Obstaja veliko različnih Barve in besedil. 238 00:11:42,760 --> 00:11:47,100 Ampak res, to je samo generična različica fgetc 239 00:11:47,100 --> 00:11:50,110 ki nam omogoča, da bi dobili koli količina informacij. 240 00:11:50,110 --> 00:11:53,560 To je lahko nekoliko neučinkovit, če smo pridobivanje znake enega naenkrat, 241 00:11:53,560 --> 00:11:55,770 ponavljanjem skozi datoteko en znak naenkrat. 242 00:11:55,770 --> 00:12:00,230 Ali ne bi bilo lepše, da bi dobili 100 naenkrat ali 500 naenkrat? 243 00:12:00,230 --> 00:12:03,250 >> No, fread in njen spremljevalec funkcija fwrite, ki bomo govorili o 244 00:12:03,250 --> 00:12:05,490 v drugo, nam omogočajo, da ne samo to. 245 00:12:05,490 --> 00:12:08,480 Mi lahko preberete poljubno količino podatkov iz datoteke 246 00:12:08,480 --> 00:12:10,290 in jo shranite nekam začasno. 247 00:12:10,290 --> 00:12:12,980 Namesto da bi bili sposobni le da se prilega v enem spremenljivko 248 00:12:12,980 --> 00:12:15,790 bomo morda morali shraniti v matriki. 249 00:12:15,790 --> 00:12:19,980 In tako, se peljemo v štirih argumenti za fread-- kazalec 250 00:12:19,980 --> 00:12:23,940 do mesta, kjer smo si gre za shranjevanje podatkov, 251 00:12:23,940 --> 00:12:29,180 kako velika vsaka enota informacij bo, koliko enot informacij 252 00:12:29,180 --> 00:12:35,192 želimo pridobiti, in iz katere datoteke želimo dobiti. 253 00:12:35,192 --> 00:12:37,150 Verjetno najbolje ponazorjeno s primerom tukaj. 254 00:12:37,150 --> 00:12:41,640 Torej, recimo, da izjavljamo niz 10 števil. 255 00:12:41,640 --> 00:12:45,080 Pravkar smo izjavil na kup samovoljno int arr 10. 256 00:12:45,080 --> 00:12:46,970 Torej, to je precej preprosta. 257 00:12:46,970 --> 00:12:51,970 Kaj delamo, čeprav je zdaj frecall se mi bereš velikost int 258 00:12:51,970 --> 00:12:54,180 krat 10 bajtov podatkov. 259 00:12:54,180 --> 00:12:59,040 Velikost int bitja four-- da je velikost celo število v c. 260 00:12:59,040 --> 00:13:02,790 >> Torej, kaj delamo, je, da smo berete 40 bajtov vredno informacij 261 00:13:02,790 --> 00:13:05,850 Iz spisa je poudaril, da ga PTR. 262 00:13:05,850 --> 00:13:08,600 In smo shranjevanje tistih, 40 bajtov nekje 263 00:13:08,600 --> 00:13:12,080 kjer smo v prahi 40 bajtov vredno spomina. 264 00:13:12,080 --> 00:13:15,970 Na srečo smo že storili, da jih razglasitvi arr, da matrika tam. 265 00:13:15,970 --> 00:13:19,770 Da je sposoben gospodarstva 10 štirih bajtov enote. 266 00:13:19,770 --> 00:13:22,860 Torej skupaj, lahko pa imajo 40 bajtov vredno informacij. 267 00:13:22,860 --> 00:13:26,540 In mi smo zdaj branje 40 bajtov informacij iz spisa, 268 00:13:26,540 --> 00:13:30,330 in smo jo shranite v ARR. 269 00:13:30,330 --> 00:13:35,470 >> Spomnimo iz video na kazalce, ki ime paleto, kot ARR 270 00:13:35,470 --> 00:13:38,370 je res samo kazalec na svojem prvem elementu. 271 00:13:38,370 --> 00:13:43,680 Torej, ko se peljemo v ARR tam, smo so v bistvu poteka v kazalca. 272 00:13:43,680 --> 00:13:46,120 >> Podobno lahko storimo this-- ne bomo nujno 273 00:13:46,120 --> 00:13:51,200 morali rešiti naš buffer na sklad. 274 00:13:51,200 --> 00:13:54,990 Lahko bi tudi dinamično dodeli buffer, kot je ta, s pomočjo malloc. 275 00:13:54,990 --> 00:13:57,340 Ne pozabite, ko smo dinamično dodeliti pomnilnika, 276 00:13:57,340 --> 00:14:00,550 smo ga shranili na kup, ne dimnika. 277 00:14:00,550 --> 00:14:02,110 Ampak to je še vedno buffer. 278 00:14:02,110 --> 00:14:06,810 >> Še vedno, v tem primeru je držite 640 bajtov informacij 279 00:14:06,810 --> 00:14:09,230 ker dvojni traja do osem bajtov. 280 00:14:09,230 --> 00:14:11,570 In smo prosi za 80 od njih. 281 00:14:11,570 --> 00:14:13,770 Želimo, da imajo prostor da imajo 80 podvoji. 282 00:14:13,770 --> 00:14:17,210 Torej 80 krat 8 je 640 bajtov informacij. 283 00:14:17,210 --> 00:14:21,880 In da je poziv k fread je zbiranje 640 bajtov informacij 284 00:14:21,880 --> 00:14:27,770 od datoteka opozoril, ki jih PTR in shranjevanje zdaj arr2. 285 00:14:27,770 --> 00:14:32,770 >> Zdaj smo lahko zdravi tudi fread tako kot poziv k fgetc. 286 00:14:32,770 --> 00:14:37,140 V tem primeru smo samo poskušam dobili en znak iz datoteke. 287 00:14:37,140 --> 00:14:40,070 In mi ne potrebujejo array imajo značaj. 288 00:14:40,070 --> 00:14:43,170 Mi lahko samo shranite v spremenljiv značaj. 289 00:14:43,170 --> 00:14:46,390 >> Ulov, pa je, da ko imamo samo spremenljivko, 290 00:14:46,390 --> 00:14:50,290 moramo opraviti v naslov te spremenljivke 291 00:14:50,290 --> 00:14:52,550 ker Spomnimo, da je Prvi argument fread 292 00:14:52,550 --> 00:14:59,210 je kazalec na mesto in spomin kjer želimo shranjevanje podatkov. 293 00:14:59,210 --> 00:15:01,550 Again, ime Niz je kazalec. 294 00:15:01,550 --> 00:15:04,200 Tako da nam ni treba storiti ampersand paleto. 295 00:15:04,200 --> 00:15:07,270 Ampak c, znak C tu ni niz. 296 00:15:07,270 --> 00:15:08,390 To je samo spremenljivka. 297 00:15:08,390 --> 00:15:11,840 In zato moramo opraviti ampersand c navesti 298 00:15:11,840 --> 00:15:15,350 da to je naslov, kjer želimo shraniti to en bajt informacij, 299 00:15:15,350 --> 00:15:20,479 to en znak, da je bomo zbiranje iz PTR. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- bom šel skozi to malo bolj 301 00:15:22,270 --> 00:15:25,440 quickly-- je precej Točen ekvivalent fread 302 00:15:25,440 --> 00:15:27,720 razen, da je za pisanje Namesto branja, samo 303 00:15:27,720 --> 00:15:31,610 všeč other-- smo imeli odprto in blizu, dobil značaj, 304 00:15:31,610 --> 00:15:32,530 napisati značaj. 305 00:15:32,530 --> 00:15:35,040 Zdaj je dobil samovoljno količina informacij, 306 00:15:35,040 --> 00:15:37,170 Pravica poljubna količina informacij. 307 00:15:37,170 --> 00:15:39,790 Torej, tako kot prej, smo lahko imajo celo paleto 10 števil 308 00:15:39,790 --> 00:15:43,210 kjer že imamo shranjeni podatki, morda. 309 00:15:43,210 --> 00:15:46,580 >> Verjetno je nekaj vrstic kode da bi morali iti med tema dvema 310 00:15:46,580 --> 00:15:49,990 kjer sem izpolnite arr z nekaj smiselna. 311 00:15:49,990 --> 00:15:51,880 Jaz ga napolnite z 10 različnih števil. 312 00:15:51,880 --> 00:15:54,920 In namesto tega, kar sem početje je pisanje iz ARR 313 00:15:54,920 --> 00:15:58,600 in zbiranje informacij iz ARR. 314 00:15:58,600 --> 00:16:02,390 In jaz peljem, da so informacije in ga je dala v datoteko. 315 00:16:02,390 --> 00:16:05,410 >> Torej, namesto da bi bilo iz datoteka za buffer, 316 00:16:05,410 --> 00:16:08,790 smo zdaj gredo iz varovalni do datoteke. 317 00:16:08,790 --> 00:16:10,580 Torej, to je samo obratno. 318 00:16:10,580 --> 00:16:16,680 Torej še enkrat, tako kot prej, smo lahko imajo tudi kup kos pomnilnika 319 00:16:16,680 --> 00:16:19,600 ki smo jih dinamično dodeljena in berejo od 320 00:16:19,600 --> 00:16:21,570 in pisati, da v spisu. 321 00:16:21,570 --> 00:16:24,900 >> In imamo tudi posamezno variabilno sposoben držati en bajt 322 00:16:24,900 --> 00:16:27,200 informacij, kot znak. 323 00:16:27,200 --> 00:16:29,830 Ampak še enkrat, moramo opraviti v naslov te spremenljivke 324 00:16:29,830 --> 00:16:31,840 kadar želimo brati iz njega. 325 00:16:31,840 --> 00:16:35,280 Tako bomo lahko napisali podatke najdemo na tem naslovu 326 00:16:35,280 --> 00:16:39,050 v datotečni kazalec, PTR. 327 00:16:39,050 --> 00:16:41,630 >> Obstaja veliko drugih super datotek I / O funkcije 328 00:16:41,630 --> 00:16:44,650 da do različnih stvari, poleg tisti, ki smo govorili danes. 329 00:16:44,650 --> 00:16:46,450 Nekaj ​​tistih boste morda našli koristne 330 00:16:46,450 --> 00:16:50,840 so fgets in fputs, ki so enakovredne 331 00:16:50,840 --> 00:16:56,190 od fgetc in fputc, ampak za branje en sam niz iz datoteke. 332 00:16:56,190 --> 00:16:59,020 Namesto ene same značaja, bo prebral celoten niz. 333 00:16:59,020 --> 00:17:02,940 fprintf, ki v osnovi omogoča vas, da uporabite printf pisati v datoteko. 334 00:17:02,940 --> 00:17:05,619 Torej, tako kot lahko storite spremenljivka nadomeščanje uporabe 335 00:17:05,619 --> 00:17:09,900 Ograde odstotkov i in odstotkov d, in tako naprej, pri čemer printf 336 00:17:09,900 --> 00:17:14,690 lahko podobno vzemite printf niz in tiskanje nekaj 337 00:17:14,690 --> 00:17:16,800 kot da v datoteko. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- če imate DVD predvajalnik je analogija sem ponavadi uporabljajo here-- 339 00:17:20,720 --> 00:17:23,109 je nekako tako kot z uporabo vašega previjanje in hitro naprej 340 00:17:23,109 --> 00:17:25,819 gumbi za premikanje po film. 341 00:17:25,819 --> 00:17:28,369 Podobno se lahko premikate po datoteki. 342 00:17:28,369 --> 00:17:30,250 Ena od stvari, znotraj da datoteke struktura 343 00:17:30,250 --> 00:17:34,270 da je c ustvarja za vas je kazalnik kje ste v datoteki. 344 00:17:34,270 --> 00:17:36,420 Ali ste na samem se začnejo na zlog ničelni? 345 00:17:36,420 --> 00:17:39,290 Ali ste na bajta 100, bajt 1000, in tako naprej? 346 00:17:39,290 --> 00:17:44,340 Lahko uporabite fseek samovoljno premikanje da kazalec naprej ali nazaj. 347 00:17:44,340 --> 00:17:46,744 >> In ftell, spet podobno kot DVD predvajalnik, 348 00:17:46,744 --> 00:17:49,660 je kot majhen uro, ki pove, si, koliko minut in vas sekund 349 00:17:49,660 --> 00:17:52,480 so v določenem film. 350 00:17:52,480 --> 00:17:56,990 Podobno ftell, kako pove veliko bajtov ste v datoteko. 351 00:17:56,990 --> 00:18:00,210 feof je drugačna različica odkrivanja ali ste 352 00:18:00,210 --> 00:18:01,700 dosegel konec datoteke. 353 00:18:01,700 --> 00:18:03,600 In ferror je funkcija ki jih lahko uporabite 354 00:18:03,600 --> 00:18:06,959 za ugotavljanje, ali ima nekaj narobe delo z datoteko. 355 00:18:06,959 --> 00:18:08,750 Tudi to je samo praskanje površine. 356 00:18:08,750 --> 00:18:12,730 Obstaja še veliko več datotek I / O Funkcije v standardni io.h. 357 00:18:12,730 --> 00:18:16,620 Vendar bo to verjetno dobili začel delati z datoteko kazalci. 358 00:18:16,620 --> 00:18:17,640 Sem Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 To je CS50. 360 00:18:19,750 --> 00:18:21,669