1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> SPEAKER: Zatiaľ je pravdepodobné, že väčšina vašich programov 3 00:00:07,870 --> 00:00:10,170 byť trochu pominuteľná. 4 00:00:10,170 --> 00:00:13,310 Spustiť program, ako Maria alebo chamtivý. 5 00:00:13,310 --> 00:00:17,350 Je to niečo robí, ale možno vyzve Užívateľ nejaké informácie, 6 00:00:17,350 --> 00:00:20,400 vytlačiť nejaký výstup na obrazovku, ale potom, keď váš program je po všetkom, 7 00:00:20,400 --> 00:00:23,252 je to naozaj neexistuje žiadny dôkaz, vôbec bola spustený v prvom rade. 8 00:00:23,252 --> 00:00:25,960 Chcem povedať, jasne, možno ste odišiel otvorí v terminálovom okne, 9 00:00:25,960 --> 00:00:29,770 ale ak vymazať obrazovku, je tu Naozaj žiadny dôkaz o tom, že to existuje. 10 00:00:29,770 --> 00:00:33,720 Nemáme prostriedky na ukladanie perzistentné informácie, informácie 11 00:00:33,720 --> 00:00:36,890 že existuje po našom Program bola zastavená, 12 00:00:36,890 --> 00:00:39,241 alebo nemáme až do tohto bodu. 13 00:00:39,241 --> 00:00:41,490 Našťastie však, c robí nám poskytujú možnosť 14 00:00:41,490 --> 00:00:44,220 na to tým, že sa vykonáva niečo, čo nazýva 15 00:00:44,220 --> 00:00:48,330 súbor, štruktúra, ktorá v zásade predstavuje súbor, ktorý by zdvojnásobiť 16 00:00:48,330 --> 00:00:53,826 kliknite na vašom počítači, ak ste slúži k grafického užívateľského prostredia. 17 00:00:53,826 --> 00:00:55,700 Všeobecne pri práci s c, my sme vlastne 18 00:00:55,700 --> 00:00:59,965 bude pracovať s ukazovatele na files-- súbor stars-- 19 00:00:59,965 --> 00:01:02,090 až na trochu keď hovoríme o pár 20 00:01:02,090 --> 00:01:04,560 z funkcií, ktoré pracovať s ukazovateľmi súborov. 21 00:01:04,560 --> 00:01:08,990 Nemusíte mať naozaj vykopali príliš hlboko do chápania ukazovateľov 22 00:01:08,990 --> 00:01:09,730 samy o sebe. 23 00:01:09,730 --> 00:01:12,870 Je tu trochu malinký kúsok kde budeme hovoriť o nich, 24 00:01:12,870 --> 00:01:18,090 ale všeobecne súbor ukazovateľov a ukazovatele, zatiaľ čo vzájomne prepojené, 25 00:01:18,090 --> 00:01:20,290 nie sú presne to isté. 26 00:01:20,290 --> 00:01:22,440 >> Čo teraz mám na mysli, keď Hovorím trvalá dáta? 27 00:01:22,440 --> 00:01:23,650 Čo je to perzistentné údaje? 28 00:01:23,650 --> 00:01:25,232 Prečo sa nám záleží na tom? 29 00:01:25,232 --> 00:01:27,190 Povedzme, napríklad, že vediete program 30 00:01:27,190 --> 00:01:29,850 alebo ste prepísaný Program, ktorý je hra, 31 00:01:29,850 --> 00:01:32,960 a chcete mať prehľad zo všetkých pohybov užívateľa 32 00:01:32,960 --> 00:01:36,620 takže možno, ak sa niečo pokazí, si môžete prezrieť v súbore po zápase. 33 00:01:36,620 --> 00:01:39,970 To je to, čo máme na mysli, keď sme hovoriť o perzistentných dát. 34 00:01:39,970 --> 00:01:43,930 >> V priebehu spustením Program, je vytvorený súbor. 35 00:01:43,930 --> 00:01:45,680 A keď váš program bola zastavená, 36 00:01:45,680 --> 00:01:48,689 že súbor stále existuje vo vašom systéme. 37 00:01:48,689 --> 00:01:50,230 A môžeme sa na to pozrieť a preskúmať ho. 38 00:01:50,230 --> 00:01:53,670 A tak, aby program by byť nastavený na vytvorili niekoľko trvalých dát, 39 00:01:53,670 --> 00:01:57,390 Existujú údaje po programe ukončil svoj beh. 40 00:01:57,390 --> 00:02:02,320 >> Teraz sú všetky tieto funkcie, ktoré pracujú s vytváranie súborov a manipuláciu 41 00:02:02,320 --> 00:02:04,940 je rôznymi spôsobmi žiť v štandardnom IO.H, 42 00:02:04,940 --> 00:02:08,210 čo je súbor hlavičky, ktoré Vy ste pravdepodobne bola libra 43 00:02:08,210 --> 00:02:10,910 a to aj na hornej časti docela veľa všetkých vašich programov 44 00:02:10,910 --> 00:02:14,130 preto, že obsahuje jeden z nasledujúcich Najužitočnejšie je funkcia pre nás, 45 00:02:14,130 --> 00:02:16,130 printf, ktorá tiež umožňuje žije v štandardnom io.h. 46 00:02:16,130 --> 00:02:20,400 Takže nemusíte búšiť zahrnúť ďalšie súbory pravdepodobne 47 00:02:20,400 --> 00:02:23,540 Aby bolo možné pracovať s ukazovateľmi súborov. 48 00:02:23,540 --> 00:02:29,980 >> Teraz každý ukazovateľ funkcie súboru, alebo každý súbor I / O, vstup výstup 49 00:02:29,980 --> 00:02:33,310 funkcie, prijíma ako jeden jeho parametre alebo vstupy 50 00:02:33,310 --> 00:02:35,822 pointer-- súbor s výnimkou pre jedného, ​​fopen, ktorý 51 00:02:35,822 --> 00:02:38,280 je to, čo použiť na získanie súboru ukazovateľ na prvom mieste. 52 00:02:38,280 --> 00:02:41,010 Ale potom, čo ste otvorení súbor a dostanete ukazovatele súboru, 53 00:02:41,010 --> 00:02:43,510 potom môžete odovzdať ako Argumenty rôznych funkcií 54 00:02:43,510 --> 00:02:46,720 budeme hovoriť o tom, Dnes, rovnako ako mnoho ďalších 55 00:02:46,720 --> 00:02:48,520 takže môžete pracovať so súbormi. 56 00:02:48,520 --> 00:02:50,980 >> Takže tam je šesť dosť spoločné základné ones 57 00:02:50,980 --> 00:02:52,870 že budeme hovoriť o dnes. 58 00:02:52,870 --> 00:02:57,160 fopen a jeho spoločník Funkcie fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 a jeho funkcie spoločník fputc, a fread a jeho spoločník funkcie, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Tak poďme priamo do nej. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- čo to robí? 63 00:03:07,050 --> 00:03:10,050 No, to otvorí súbor, a to vám dáva ukazovateľ súboru na to, 64 00:03:10,050 --> 00:03:14,000 takže potom môžete použiť, že súbor ukazovateľ ako argument 65 00:03:14,000 --> 00:03:16,730 na niektorú z druhého súboru I / O funkcie. 66 00:03:16,730 --> 00:03:19,100 Najdôležitejšou vecou pamätať si s fopen 67 00:03:19,100 --> 00:03:24,222 je, že potom, čo ste otvoril súboru alebo kamsi zavolal, ako je tá tu, 68 00:03:24,222 --> 00:03:26,930 je potrebné skontrolovať, aby sa ubezpečil že ukazovateľ, že ste sa vrátili 69 00:03:26,930 --> 00:03:28,320 sa nerovná null. 70 00:03:28,320 --> 00:03:31,320 Ak ste sledovali video na ukazovatele, mohlo by to nedávalo zmysel. 71 00:03:31,320 --> 00:03:35,639 Ale ak sa pokúsite a dereferencia nulový ukazovateľ odvolanie, 72 00:03:35,639 --> 00:03:38,180 váš program bude pravdepodobne trpieť segmentácia [nepočuteľných]. 73 00:03:38,180 --> 00:03:40,540 Chceme, aby sa uistil, že sme dostal legitímne ukazovateľ chrbát. 74 00:03:40,540 --> 00:03:43,665 Drvivá väčšina času budeme sa dostali legitímne ukazovateľ späť 75 00:03:43,665 --> 00:03:45,280 a to nebude problém. 76 00:03:45,280 --> 00:03:46,760 >> Tak ako to urobíme volanie fopen? 77 00:03:46,760 --> 00:03:48,051 Vyzerá to skoro ako je tento. 78 00:03:48,051 --> 00:03:52,690 Súbor hviezda ptr-- PTR byť všeobecný meno pre súbor pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 a míňame dve veci, názov súboru a operácie chceme podniknúť. 80 00:03:57,300 --> 00:04:01,690 Takže by sme mohli mať hovor, ktorý vyzerá ako tohle-- súbor hviezda ptr 1 rovná fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 A operácie som zvolil, je r. 83 00:04:07,020 --> 00:04:08,639 >> Takže to, čo si myslíte, že r je tu? 84 00:04:08,639 --> 00:04:11,180 Aké sú druhy vecí, ktoré sme mohol urobiť, aby súbory? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Takže r je operácia, ktorá sme zvoliť, kedy chceme čítať súbor. 87 00:04:17,500 --> 00:04:20,260 Takže by sme v podstate, keď sme volať takhle 88 00:04:20,260 --> 00:04:25,440 sa dostať sami ukazovateľ súboru taká, že by sme mohli čítať informácie 89 00:04:25,440 --> 00:04:27,770 od file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Rovnako tak by sme mohli otvoriť súbor 2.txt pre písanie a tak môžeme prejsť ptr2, 91 00:04:34,190 --> 00:04:38,210 Súbor ukazovateľ som tu vytvoril, ako argument pre akúkoľvek funkciu, ktorá 92 00:04:38,210 --> 00:04:40,080 zapíše informácie do súboru. 93 00:04:40,080 --> 00:04:43,767 A podobne ako písanie, je tu tiež možnosť pripojiť, a. 94 00:04:43,767 --> 00:04:45,600 Rozdiel medzi písanie a pripojením 95 00:04:45,600 --> 00:04:50,920 v tom, že keď píšete do súboru, ak urobíte volanie fopen pre písanie 96 00:04:50,920 --> 00:04:54,761 a tento súbor už existuje, je to chystá prepísať celý súbor. 97 00:04:54,761 --> 00:04:56,510 Bude to začiatok na samom začiatku, 98 00:04:56,510 --> 00:04:58,820 odstránenie všetky informácie že už tam je. 99 00:04:58,820 --> 00:05:02,210 >> Vzhľadom k tomu, ak ho otvorený iba pre pripojenie, to pôjde na koniec súboru 100 00:05:02,210 --> 00:05:04,340 v prípade, že je už v texte ho alebo informácie v ňom, 101 00:05:04,340 --> 00:05:06,040 a bude potom začať písanie odtiaľ. 102 00:05:06,040 --> 00:05:08,570 Takže budete nestratili nič z Informácie, ktoré ste predtým. 103 00:05:08,570 --> 00:05:12,110 Či už chcete písať alebo pripojiť druh závisí od situácie. 104 00:05:12,110 --> 00:05:16,840 Ale pravdepodobne budete vedieť, čo právo operácie je, keď príde čas. 105 00:05:16,840 --> 00:05:18,020 Tak to je fopen. 106 00:05:18,020 --> 00:05:18,930 >> Čo fclose? 107 00:05:18,930 --> 00:05:21,600 No, celkom jednoducho, fclose práve prijíma ukazovateľ súboru. 108 00:05:21,600 --> 00:05:24,000 A ako sa dalo očakávať, zavrie tento súbor. 109 00:05:24,000 --> 00:05:29,270 A akonáhle sme uzavreli súbor, nemôžeme vykonávať žiadne ďalšie súbor I / O funkcie, 110 00:05:29,270 --> 00:05:31,420 čítania alebo zápisu na tomto súbore. 111 00:05:31,420 --> 00:05:36,444 Musíme znovu otvoriť súbor inokedy, aby 112 00:05:36,444 --> 00:05:38,610 pokračovať v práci s to pomocou I / O-funkcie. 113 00:05:38,610 --> 00:05:41,520 Takže fclose znamená, že sme hotoví prácu s týmto súborom. 114 00:05:41,520 --> 00:05:44,690 A všetko, čo potrebujeme, je odovzdať meno ukazovateľ v súbore. 115 00:05:44,690 --> 00:05:50,010 Takže o pár posunie pred sme fopened súbor 1 bod text pre čítanie 116 00:05:50,010 --> 00:05:52,854 a sme priradili, že súbor ukazovateľ na ptr1. 117 00:05:52,854 --> 00:05:55,020 Teraz sme sa rozhodli, že sme vykonáva čítanie z tohto súboru. 118 00:05:55,020 --> 00:05:56,561 Nepotrebujeme robiť viac s ním. 119 00:05:56,561 --> 00:05:58,890 Môžeme len fclose ptr1. 120 00:05:58,890 --> 00:06:01,950 A rovnako, mohli by sme fclose tie ostatné. 121 00:06:01,950 --> 00:06:02,450 Dobre. 122 00:06:02,450 --> 00:06:03,700 Tak to je otváranie a zatváranie. 123 00:06:03,700 --> 00:06:05,780 To sú dva základné začatí operácie. 124 00:06:05,780 --> 00:06:08,050 >> Teraz chceme skutočne urobiť nejaké zaujímavé veci, 125 00:06:08,050 --> 00:06:11,940 a prvá funkcia, že budeme vidieť, že to urobí, je fgetc-- 126 00:06:11,940 --> 00:06:14,110 podať si charakter. 127 00:06:14,110 --> 00:06:17,350 To je to, čo zvyčajne fgetc by sa premietajú do. 128 00:06:17,350 --> 00:06:20,190 Jeho životným cieľom je prečítať nasledujúce znak, 129 00:06:20,190 --> 00:06:22,079 alebo ak je to vaše veľmi Prvé volanie fgetc 130 00:06:22,079 --> 00:06:23,870 pre určitý súbor, prvý znak. 131 00:06:23,870 --> 00:06:26,210 Ale potom po tom, dostanete ďalší, 132 00:06:26,210 --> 00:06:31,500 hneď ďalší charakter tohto súboru, a ukladá ju do premennej znak. 133 00:06:31,500 --> 00:06:34,490 Ako sme tu urobili, char ch rovná fgetc, 134 00:06:34,490 --> 00:06:36,389 prejsť v mene ukazovateľ v súbore. 135 00:06:36,389 --> 00:06:38,180 Opäť platí, že je to veľmi tu dôležité mať na pamäti, 136 00:06:38,180 --> 00:06:41,430 že za účelom vykonania táto operácia úspešná, 137 00:06:41,430 --> 00:06:45,690 Súbor ukazovateľ sám musel bol otvorený pre čítanie. 138 00:06:45,690 --> 00:06:50,589 Nemôžeme čítať znak zo súboru ukazovateľ, ktorý sme otvorili pre zápis. 139 00:06:50,589 --> 00:06:52,630 Takže to je jedna z obmedzenia fopen, že jo? 140 00:06:52,630 --> 00:06:55,470 Musíme obmedziť aby sme sa iba vykonávania 141 00:06:55,470 --> 00:06:57,710 jedna operácia s jedným ukazovateľ v súbore. 142 00:06:57,710 --> 00:07:00,220 Ak by sme chceli čítať a napísať z rovnakého súboru, 143 00:07:00,220 --> 00:07:03,840 budeme mať otvorené dva samostatné ukazovatele súbor do rovnakej file-- 144 00:07:03,840 --> 00:07:05,670 jeden pre čítanie, jeden pre písanie. 145 00:07:05,670 --> 00:07:08,400 >> Takže znova, jediný dôvod, prečo Uvediem, že sa teraz je 146 00:07:08,400 --> 00:07:11,920 pretože ak budeme volať na fgetc, že ​​ukazovateľ súboru muselo 147 00:07:11,920 --> 00:07:14,172 bol otvorený pre čítanie. 148 00:07:14,172 --> 00:07:15,880 A potom celkom jednoducho, všetko, čo potrebujete urobiť, 149 00:07:15,880 --> 00:07:17,546 je prejsť v názve ukazovateľ v súbore. 150 00:07:17,546 --> 00:07:21,060 Takže char ch rovná fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> To bude, aby sme sa dostali ďalšie character-- 152 00:07:23,200 --> 00:07:25,575 alebo znovu, ak sa jedná o prvý Tentoraz sme urobili túto výzvu, 153 00:07:25,575 --> 00:07:29,750 prvý character-- akéhokoľvek súbor odkazuje ptr1. 154 00:07:29,750 --> 00:07:32,210 Pripomeňme si, že to bol súbor 1 bod textu. 155 00:07:32,210 --> 00:07:36,490 To bude mať prvé písmeno, ktoré a my uložiť ho do premennej ch. 156 00:07:36,490 --> 00:07:37,941 Celkom jednoduché. 157 00:07:37,941 --> 00:07:40,190 A tak sme sa len pozrel na tri funkcie a už sme 158 00:07:40,190 --> 00:07:43,070 môže niečo celkom čistý. 159 00:07:43,070 --> 00:07:46,320 >> Takže ak vezmeme túto schopnosť dostať znak 160 00:07:46,320 --> 00:07:48,943 a my slučka to-- tak sme naďalej dostávať znaky 161 00:07:48,943 --> 00:07:51,390 zo súboru znova a nad a over-- teraz sme 162 00:07:51,390 --> 00:07:54,500 môže čítať každý charakter súboru. 163 00:07:54,500 --> 00:07:58,670 A ak budeme tlačiť každý znak hneď po tom, čo sme si ho prečítali, 164 00:07:58,670 --> 00:08:01,960 sme teraz čítať zo súboru a tlačený jeho obsah na obrazovku. 165 00:08:01,960 --> 00:08:05,610 Sme účinne reťazcový tento súbor na obrazovke. 166 00:08:05,610 --> 00:08:09,670 A to je to, čo Linux príkaz cat robí. 167 00:08:09,670 --> 00:08:13,250 >> Ak zadáte mačka v názve súboru to, vytlačí celý obsah 168 00:08:13,250 --> 00:08:15,160 súboru v okne vášho terminálu. 169 00:08:15,160 --> 00:08:19,010 A tak táto malá slučka tu, iba tri riadky kódu, 170 00:08:19,010 --> 00:08:23,270 ale účinne zdvojuje Linux príkaz cat. 171 00:08:23,270 --> 00:08:25,210 Tak toto by mohlo syntaxe vyzerať trochu divne, 172 00:08:25,210 --> 00:08:26,670 ale tu je to, čo sa tu deje. 173 00:08:26,670 --> 00:08:31,460 Kým ch rovná fgetc, ptr nie je rovná EOF--, že je to celé sústo, 174 00:08:31,460 --> 00:08:34,669 ale poďme rozobrať to len takže je jasné, na syntax. 175 00:08:34,669 --> 00:08:37,169 Ja som to upevnil kvôli priestoru, 176 00:08:37,169 --> 00:08:39,049 aj keď je to trochu syntakticky zradné. 177 00:08:39,049 --> 00:08:41,194 >> Takže táto časť v zelenej vpravo A teraz, čo to robí? 178 00:08:41,194 --> 00:08:42,860 No, to je práve náš fgetc volania, že jo? 179 00:08:42,860 --> 00:08:44,530 Videli sme, že pred. 180 00:08:44,530 --> 00:08:49,500 Je to získanie jedného znak zo súboru. 181 00:08:49,500 --> 00:08:53,220 Potom sme sa porovnať, že znak proti OSZ. 182 00:08:53,220 --> 00:08:57,470 EOF je zvláštne hodnota, ktorá je definované v norme IO.H, ktorý 183 00:08:57,470 --> 00:08:59,390 je koniec súboru charakteru. 184 00:08:59,390 --> 00:09:03,450 Takže v podstate to, čo sa bude diať je táto slučka bude čítať znak, 185 00:09:03,450 --> 00:09:07,445 porovnať ju s EOF sa Koniec súboru charakteru. 186 00:09:07,445 --> 00:09:10,070 Ak sa nezhodujú, takže nemáme došiel na koniec súboru, 187 00:09:10,070 --> 00:09:11,490 budeme tlačiť tú postavu von. 188 00:09:11,490 --> 00:09:13,740 Potom sa vrátime do začiatok slučky znovu. 189 00:09:13,740 --> 00:09:18,310 Dostaneme charakter, skontrolujte proti OSZ, vytlačiť, a tak ďalej 190 00:09:18,310 --> 00:09:21,094 a tak ďalej, a tak ďalej, opakovanie prostredníctvom týmto spôsobom 191 00:09:21,094 --> 00:09:22,760 až sme došli na koniec súboru. 192 00:09:22,760 --> 00:09:24,593 A potom sa tým bodom, budeme mať vytlačené 193 00:09:24,593 --> 00:09:26,210 out celého obsahu spisu. 194 00:09:26,210 --> 00:09:29,450 Takže znovu, sme videli len fopen, fclose, a fgetc 195 00:09:29,450 --> 00:09:34,950 a už môžeme duplikovať terminálny príkaz Linux. 196 00:09:34,950 --> 00:09:38,850 >> Ako som povedal na začiatku, mali sme fgetc a fputc, 197 00:09:38,850 --> 00:09:41,860 a fputc bol spoločníkom funkcie fgetc. 198 00:09:41,860 --> 00:09:44,880 A tak, ako by ste si mohli predstaviť, to je ekvivalent písanie. 199 00:09:44,880 --> 00:09:49,440 To nám umožňuje napísať jeden znak do súboru. 200 00:09:49,440 --> 00:09:53,290 >> Opäť platí, že je námietka, len ako by to bolo s fgetc, súbor 201 00:09:53,290 --> 00:09:56,660 že sme písomne ​​musel byť otvoriť pre zápis alebo len pre pripojenie. 202 00:09:56,660 --> 00:10:00,820 Ak sa budeme snažiť a používať fputc na súbor že sme otvorený pre čítanie, 203 00:10:00,820 --> 00:10:02,760 budeme trpieť trochu omylom. 204 00:10:02,760 --> 00:10:04,440 Ale volanie je veľmi jednoduchý. 205 00:10:04,440 --> 00:10:08,000 fputc kapitálu ptr2, všetky že to bude robiť, je, že je to 206 00:10:08,000 --> 00:10:12,040 chystá napísať list do A do súboru 2 bodkou 207 00:10:12,040 --> 00:10:14,760 text, čo bolo meno toho súbor, ktorý sme otvorili a pridelený 208 00:10:14,760 --> 00:10:17,280 ukazovateľ na ptr2. 209 00:10:17,280 --> 00:10:20,430 Takže budeme napísať kapitál od A do súboru 2 dot text. 210 00:10:20,430 --> 00:10:24,592 A budeme písať výkrik poukazujú na súbore 3 bodka 211 00:10:24,592 --> 00:10:27,330 text, ktorý bol na ktorý ukazuje ptr3. 212 00:10:27,330 --> 00:10:29,730 Takže znovu, tu celkom jednoduché. 213 00:10:29,730 --> 00:10:32,727 >> Ale teraz môžeme robiť niečo iné. 214 00:10:32,727 --> 00:10:34,560 Máme tento príklad sme jednoducho ísť cez 215 00:10:34,560 --> 00:10:38,950 o schopnosti replikovať mačku Linux príkaz, ten, ktorý vytlačí 216 00:10:38,950 --> 00:10:40,500 na obrazovku. 217 00:10:40,500 --> 00:10:43,510 No, teraz, že máme schopnosť čítať znaky zo súborov 218 00:10:43,510 --> 00:10:46,590 a písať znaky do súborov, prečo nie my jednoducho nahradiť, že 219 00:10:46,590 --> 00:10:50,720 zavolať do printf s volaním fputc. 220 00:10:50,720 --> 00:10:54,090 >> A teraz sme duplicitné cp, veľmi základné príkaz Linux 221 00:10:54,090 --> 00:10:59,100 že sme hovorili o spôsob, ako dlho Pred v Linuxe príkazy videa. 222 00:10:59,100 --> 00:11:01,070 Máme skutočne som duplikované, že práve tu. 223 00:11:01,070 --> 00:11:04,790 Sme čítanie postavu a potom sme písania, že znak iného súboru. 224 00:11:04,790 --> 00:11:07,660 Čítanie z jedného súboru, písanie do druhého, znovu a znovu 225 00:11:07,660 --> 00:11:11,350 a znovu, kým sme narazili EOF. 226 00:11:11,350 --> 00:11:14,250 Musíme sa na konci súbor sa snažíme kopírovať. 227 00:11:14,250 --> 00:11:18,500 A tým, že budeme mať napísané postáv musíme súboru 228 00:11:18,500 --> 00:11:19,500 že sme písomne. 229 00:11:19,500 --> 00:11:24,270 Tak toto je cp, príkaz Linux kopírovanie. 230 00:11:24,270 --> 00:11:26,550 >> Na samom počiatku toto video, mal som námietku 231 00:11:26,550 --> 00:11:29,840 že by sme hovoriť Niečo málo o ukazovatele. 232 00:11:29,840 --> 00:11:32,480 Tu sa konkrétne, kde sme hovoriť o ukazovatele 233 00:11:32,480 --> 00:11:34,800 okrem súboru ukazovatele. 234 00:11:34,800 --> 00:11:37,870 Takže táto funkcia vyzerá desivo. 235 00:11:37,870 --> 00:11:39,120 Má to niekoľko parametrov. 236 00:11:39,120 --> 00:11:40,430 Je tu veľa deje. 237 00:11:40,430 --> 00:11:42,760 Je tu mnoho rôznych farby a texty. 238 00:11:42,760 --> 00:11:47,100 Ale vážne, je to len generické verzie fgetc 239 00:11:47,100 --> 00:11:50,110 ktorý nám umožňuje dostať nejakú množstvo informácií. 240 00:11:50,110 --> 00:11:53,560 To môže byť trochu neefektívne keď sme dostať znakov jeden po druhom, 241 00:11:53,560 --> 00:11:55,770 iterácie súboru jeden znak naraz. 242 00:11:55,770 --> 00:12:00,230 Nebolo by to byť krajšie sa dostať 100 v čase, alebo 500 v čase? 243 00:12:00,230 --> 00:12:03,250 >> No, fread a jeho spoločník funkcie fwrite, ktorý budeme hovoriť o tom, 244 00:12:03,250 --> 00:12:05,490 V druhej, nám umožňujú robiť len to. 245 00:12:05,490 --> 00:12:08,480 Môžeme prečítať ľubovoľnú čiastku informácií z súboru 246 00:12:08,480 --> 00:12:10,290 a uložíme ho niekde dočasne. 247 00:12:10,290 --> 00:12:12,980 Namiesto toho, že sa môže len vošiel v jednej premennej, 248 00:12:12,980 --> 00:12:15,790 by sme mohli potrebovať uložiť ho do poľa. 249 00:12:15,790 --> 00:12:19,980 A tak sme sa prejsť v štyroch argumenty fread-- ukazovateľ 250 00:12:19,980 --> 00:12:23,940 na miesto, kam máme sa na ukladanie informácií, 251 00:12:23,940 --> 00:12:29,180 ako veľké sú jednotlivé informačné jednotkou bude, koľko jednotiek informácií 252 00:12:29,180 --> 00:12:35,192 chceme získať, a od ktorý súbor chceme dostať. 253 00:12:35,192 --> 00:12:37,150 Pravdepodobne najlepšie dokazuje s príkladom tu. 254 00:12:37,150 --> 00:12:41,640 Takže povedzme, že prehlasujeme Pole 10 celých čísel. 255 00:12:41,640 --> 00:12:45,080 Práve sme deklaroval na stack ľubovoľne int arr 10. 256 00:12:45,080 --> 00:12:46,970 Tak to je celkom jednoduché. 257 00:12:46,970 --> 00:12:51,970 To, čo robíme, ale teraz je frecall sa budeme veľkosť int čítanie 258 00:12:51,970 --> 00:12:54,180 krát 10 bajtov informácií. 259 00:12:54,180 --> 00:12:59,040 Veľkosť int bytia four-- to je veľkosť celé číslo v C. 260 00:12:59,040 --> 00:13:02,790 >> Takže to, čo robíme je, že čítate 40 bytov v hodnote informácií 261 00:13:02,790 --> 00:13:05,850 zo súboru, na ktorý ukazuje PTR. 262 00:13:05,850 --> 00:13:08,600 A my sme tí, skladovanie 40 bytov niekde 263 00:13:08,600 --> 00:13:12,080 kde sme odložili 40 bytov v hodnote pamäti. 264 00:13:12,080 --> 00:13:15,970 Našťastie sme už urobili, že deklarovať arr, že pole tam. 265 00:13:15,970 --> 00:13:19,770 To je vhodné pre uchovávanie 10 štvorbajtovom jednotky. 266 00:13:19,770 --> 00:13:22,860 Takže celkom, to môže držať 40 bytov v hodnote informácií. 267 00:13:22,860 --> 00:13:26,540 A my sme práve čítate 40 bajtov informácií zo spisu, 268 00:13:26,540 --> 00:13:30,330 a my ukladania do arr. 269 00:13:30,330 --> 00:13:35,470 >> Pripomeňme z videa na ukazovatele, ktoré meno poľa, ako je napríklad arr, 270 00:13:35,470 --> 00:13:38,370 je naozaj len ukazovateľ k jeho prvému prvku. 271 00:13:38,370 --> 00:13:43,680 Takže keď sme sa prejsť v arr tam, sme sa sú v skutočnosti, odovzdaním ukazovateľ. 272 00:13:43,680 --> 00:13:46,120 >> Podobne môžeme urobiť tohle-- my nie nutne 273 00:13:46,120 --> 00:13:51,200 treba zachrániť naše vyrovnávacej pamäte v zásobníku. 274 00:13:51,200 --> 00:13:54,990 Tiež by sme mohli dynamicky prideľovať vyrovnávacia pamäť ako je tento, pomocou malloc. 275 00:13:54,990 --> 00:13:57,340 Pamätajte si, že keď sme sa dynamicky alokovať pamäť, 276 00:13:57,340 --> 00:14:00,550 sme jeho uloženie na haldy, nie zásobník. 277 00:14:00,550 --> 00:14:02,110 Ale je to stále vyrovnávacej pamäte. 278 00:14:02,110 --> 00:14:06,810 >> Stále, v tomto prípade je držanie 640 bajtov informácií 279 00:14:06,810 --> 00:14:09,230 pretože double zaberá osem bajtov. 280 00:14:09,230 --> 00:14:11,570 A žiadame pre 80 z nich. 281 00:14:11,570 --> 00:14:13,770 Chceme mať priestor držať 80 dvojlôžkových izieb. 282 00:14:13,770 --> 00:14:17,210 Tak 80 krát 8 640 bajtov informácie. 283 00:14:17,210 --> 00:14:21,880 A to je výzva na fread zbieranie 640 bajtov informácií 284 00:14:21,880 --> 00:14:27,770 zo súboru, na ktorý ukazuje PTR a ukladanie teraz v Arr2. 285 00:14:27,770 --> 00:14:32,770 >> Teraz môžeme liečiť fread rovnako ako volanie fgetc. 286 00:14:32,770 --> 00:14:37,140 V tomto prípade, my sme len sa snažia získať jeden znak zo súboru. 287 00:14:37,140 --> 00:14:40,070 A my nepotrebujú array držať znak. 288 00:14:40,070 --> 00:14:43,170 Môžeme len uložiť ho do variabilný znak. 289 00:14:43,170 --> 00:14:46,390 >> Úlovok, však je, že keď sme jednoducho premennú, 290 00:14:46,390 --> 00:14:50,290 musíme prejsť v Adresa tejto premennej 291 00:14:50,290 --> 00:14:52,550 Pripomeňme si, že preto, Prvý argument fread 292 00:14:52,550 --> 00:14:59,210 je ukazovateľ na umiestnenie a pamäti kde chceme uložiť informácie. 293 00:14:59,210 --> 00:15:01,550 Opäť platí, že na meno pole je ukazovateľ. 294 00:15:01,550 --> 00:15:04,200 Takže nepotrebujeme robiť ampersand poľa. 295 00:15:04,200 --> 00:15:07,270 Ale c, charakter c tu, nie je poľom. 296 00:15:07,270 --> 00:15:08,390 Je to len variabilné. 297 00:15:08,390 --> 00:15:11,840 A preto je treba zložiť ampersand c uviesť 298 00:15:11,840 --> 00:15:15,350 že to je adresa, kde chceme uložiť tento jeden bajt informácií, 299 00:15:15,350 --> 00:15:20,479 to jeden znak, ktorý sme zber z PTR. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- Prejdem to trochu viac 301 00:15:22,270 --> 00:15:25,440 quickly-- je skoro presný ekvivalent fread 302 00:15:25,440 --> 00:15:27,720 s výnimkou, že je to pre písanie miesto čítanie, len 303 00:15:27,720 --> 00:15:31,610 rovnako ako other-- sme mali otvorené V blízkosti, si postavu, 304 00:15:31,610 --> 00:15:32,530 napísať znak. 305 00:15:32,530 --> 00:15:35,040 Teraz je to dostať ľubovoľná Množstvo informácií, 306 00:15:35,040 --> 00:15:37,170 právo ľubovoľné množstvo informácií. 307 00:15:37,170 --> 00:15:39,790 Takže rovnako ako predtým, môžeme majú celý rad 10 celých čísel 308 00:15:39,790 --> 00:15:43,210 kde už máme Informácie uložené, snáď. 309 00:15:43,210 --> 00:15:46,580 >> To bolo pravdepodobne niekoľko riadkov kódu že by mal ísť medzi týmito dvoma 310 00:15:46,580 --> 00:15:49,990 kde som naplniť arr sa niečo zmysluplné. 311 00:15:49,990 --> 00:15:51,880 Aj naplňte ju 10 rôznych čísel. 312 00:15:51,880 --> 00:15:54,920 A namiesto toho, čo ja som robí píše z arr 313 00:15:54,920 --> 00:15:58,600 a zhromažďovanie informácií od arr. 314 00:15:58,600 --> 00:16:02,390 A beriem, že informácie a uvedenie do súboru. 315 00:16:02,390 --> 00:16:05,410 >> Takže namiesto toho by bolo z súbor do vyrovnávacej pamäte, 316 00:16:05,410 --> 00:16:08,790 Teraz sa z vyrovnávacej pamäte do súboru. 317 00:16:08,790 --> 00:16:10,580 Takže je to práve naopak. 318 00:16:10,580 --> 00:16:16,680 Takže znovu, rovnako ako predtým, môžeme majú tiež haldy kus pamäte 319 00:16:16,680 --> 00:16:19,600 že máme dynamicky pridelené a čítať z toho 320 00:16:19,600 --> 00:16:21,570 a píšu, že do súboru. 321 00:16:21,570 --> 00:16:24,900 >> A máme tiež jednu premennú schopná pojať jeden bajt 322 00:16:24,900 --> 00:16:27,200 informácií, ako je charakter. 323 00:16:27,200 --> 00:16:29,830 Ale opäť, musíme odovzdať adresa tejto premennej 324 00:16:29,830 --> 00:16:31,840 keď chceme čítať z neho. 325 00:16:31,840 --> 00:16:35,280 Takže môžeme zapísať informácie nájdeme na tejto adrese 326 00:16:35,280 --> 00:16:39,050 na ukazovateľ v súbore, ptr. 327 00:16:39,050 --> 00:16:41,630 >> Je tu veľa iného veľký súbor I / O funkcie 328 00:16:41,630 --> 00:16:44,650 že robiť rôzne veci okrem toho tie, ktoré sme hovorili o dnešku. 329 00:16:44,650 --> 00:16:46,450 Pár z tých, môžete nájsť užitočné 330 00:16:46,450 --> 00:16:50,840 sú fgets a fputs, ktoré sú ekvivalentné 331 00:16:50,840 --> 00:16:56,190 z fgetc a fputc ale pre čítanie jediný reťazec zo súboru. 332 00:16:56,190 --> 00:16:59,020 Namiesto toho, jeden znak, to bude čítať celý reťazec. 333 00:16:59,020 --> 00:17:02,940 fprintf, ktorý v zásade umožňuje použiť printf zapisovať do súboru. 334 00:17:02,940 --> 00:17:05,619 Takže rovnako ako vy môžete urobiť Substitúcia premenných s použitím 335 00:17:05,619 --> 00:17:09,900 Symboly percent i a percent d, a tak ďalej, s printf 336 00:17:09,900 --> 00:17:14,690 môžete doneste printf reťazec a tlačiť niečo 337 00:17:14,690 --> 00:17:16,800 ako, že do súboru. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- ak máte DVD prehrávač je analógia I obyčajne používajú here-- 339 00:17:20,720 --> 00:17:23,109 je niečo ako pomocou svojho pretočiť a rýchlo dopredu 340 00:17:23,109 --> 00:17:25,819 tlačidlá pre pohyb po filme. 341 00:17:25,819 --> 00:17:28,369 Podobne môžete pohybovať po súbore. 342 00:17:28,369 --> 00:17:30,250 Jednou z vecí, vnútri že štruktúra súboru 343 00:17:30,250 --> 00:17:34,270 že c vytvára pre vás je indikátor kde ste v súbore. 344 00:17:34,270 --> 00:17:36,420 Vy ste u veľmi začiatok, v byte nulovej? 345 00:17:36,420 --> 00:17:39,290 Ste na bajtu 100, Byte 1000, a tak ďalej? 346 00:17:39,290 --> 00:17:44,340 Môžete použiť fseek ľubovoľne pohybovať že ukazovateľ dopredu alebo dozadu. 347 00:17:44,340 --> 00:17:46,744 >> A ftell, znovu podobne ako DVD prehrávače, 348 00:17:46,744 --> 00:17:49,660 je ako malý hodiny, ktoré hovorí, vy, koľko minút a sekúnd 349 00:17:49,660 --> 00:17:52,480 sú do určitého filmu. 350 00:17:52,480 --> 00:17:56,990 Rovnako tak, ako vám povie ftell veľa bajtov ste do súboru. 351 00:17:56,990 --> 00:18:00,210 feof je iná verzia detekcia Či už ste 352 00:18:00,210 --> 00:18:01,700 došiel na koniec súboru. 353 00:18:01,700 --> 00:18:03,600 A ferror je funkcia ktoré môžete použiť 354 00:18:03,600 --> 00:18:06,959 zistiť, či má niečo pokazilo prácu so súborom. 355 00:18:06,959 --> 00:18:08,750 Znovu, toto je len poškriabaniu povrchu. 356 00:18:08,750 --> 00:18:12,730 Je tu ešte veľa ďalších súborov I / O funkcie v štandardnom io.h. 357 00:18:12,730 --> 00:18:16,620 Ale to bude pravdepodobne dostanete začal pracovať s ukazovateľmi súborov. 358 00:18:16,620 --> 00:18:17,640 Som Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 To je CS50. 360 00:18:19,750 --> 00:18:21,669