1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> Előadó: Eddig, akkor valószínű, hogy a legtöbb program 3 00:00:07,870 --> 00:00:10,170 már egy kicsit mulandó. 4 00:00:10,170 --> 00:00:13,310 Egy olyan programot futtat, mint a Mario és kapzsi. 5 00:00:13,310 --> 00:00:17,350 Ez nem valami, akkor talán kéri a felhasználó valamilyen információt, 6 00:00:17,350 --> 00:00:20,400 print néhány kimenetét a képernyőre, de aztán amikor a program vége, 7 00:00:20,400 --> 00:00:23,252 már tényleg nincs bizonyíték van azt botlott az első helyen. 8 00:00:23,252 --> 00:00:25,960 Úgy értem, persze, lehet, hogy nem engedélyezte ez megnyitja a terminál ablakban, 9 00:00:25,960 --> 00:00:29,770 de ha törli a képernyőt, van Tényleg nincs bizonyíték, hogy létezik. 10 00:00:29,770 --> 00:00:33,720 Jelenleg nincs történő tárolásának kitartó információk, 11 00:00:33,720 --> 00:00:36,890 hogy létezik miután a programot leállt, 12 00:00:36,890 --> 00:00:39,241 vagy mi nem a pontig. 13 00:00:39,241 --> 00:00:41,490 Szerencsére azonban a C-nek biztosítja számunkra a képességét, 14 00:00:41,490 --> 00:00:44,220 Ehhez a végrehajtási egy úgynevezett 15 00:00:44,220 --> 00:00:48,330 egy fájl, egy szerkezet, amely alapvetően képvisel olyan fájl, amelyet a kétszeresére nőne 16 00:00:48,330 --> 00:00:53,826 kattintson a számítógépen, ha használt grafikus felhasználói környezetet. 17 00:00:53,826 --> 00:00:55,700 Általában, ha dolgozik ac vagyunk valójában 18 00:00:55,700 --> 00:00:59,965 fog együtt dolgozni mutatókat files-- fájl stars-- 19 00:00:59,965 --> 00:01:02,090 kivéve egy kicsit amikor arról beszélünk, egy pár 20 00:01:02,090 --> 00:01:04,560 A funkciók dolgozni fájl mutató. 21 00:01:04,560 --> 00:01:08,990 Nem kell, hogy valóban ástak túl mélyen megértést mutató 22 00:01:08,990 --> 00:01:09,730 magukat. 23 00:01:09,730 --> 00:01:12,870 Van egy kis pici kicsit ahol fogunk beszélni velük, 24 00:01:12,870 --> 00:01:18,090 de általában fájl mutatók és mutatók, miközben egymással, 25 00:01:18,090 --> 00:01:20,290 nem pontosan ugyanaz a dolog. 26 00:01:20,290 --> 00:01:22,440 >> Most mit gondolok, amikor Azt mondom megmaradó adatokat? 27 00:01:22,440 --> 00:01:23,650 Mi megmaradó adatokat? 28 00:01:23,650 --> 00:01:25,232 Miért érdekel ez? 29 00:01:25,232 --> 00:01:27,190 Mondjuk, például, hogy futsz egy programot 30 00:01:27,190 --> 00:01:29,850 vagy ha már átírták a program, amely egy játék, 31 00:01:29,850 --> 00:01:32,960 és szeretné nyomon követni minden a felhasználó mozog 32 00:01:32,960 --> 00:01:36,620 így talán, ha valami elromlik, akkor megtekintheti a fájlt a meccs után. 33 00:01:36,620 --> 00:01:39,970 Ez az, amit értünk az alatt, beszélni megmaradó adatokat. 34 00:01:39,970 --> 00:01:43,930 >> Ennek során a futás a program, a fájl jön létre. 35 00:01:43,930 --> 00:01:45,680 És amikor a program leállt, 36 00:01:45,680 --> 00:01:48,689 hogy a fájl még létezik a rendszeren. 37 00:01:48,689 --> 00:01:50,230 És nézd meg, és vizsgáljuk meg. 38 00:01:50,230 --> 00:01:53,670 És úgy, hogy a program lenne beállítva létrehozott néhány megmaradó adatokat, 39 00:01:53,670 --> 00:01:57,390 adat áll rendelkezésre a program után befejezte működését. 40 00:01:57,390 --> 00:02:02,320 >> Most mindezen funkciókat, hogy a munka A fájlok létrehozását és manipulálni 41 00:02:02,320 --> 00:02:04,940 őket különböző módokon él szabvány io.h, 42 00:02:04,940 --> 00:02:08,210 ami egy fejlécfájlból amit valószínűleg már font 43 00:02:08,210 --> 00:02:10,910 beleértve a tetején szép sokat az összes programot 44 00:02:10,910 --> 00:02:14,130 mert tartalmazza az egyik leghasznosabb funkciója a számunkra, 45 00:02:14,130 --> 00:02:16,130 printf, hogy azt is lehetővé teszi él szabvány io.h. 46 00:02:16,130 --> 00:02:20,400 Szóval nem kell verni közé további fájlokat valószínűleg 47 00:02:20,400 --> 00:02:23,540 annak érdekében, hogy működjön együtt a fájl mutató. 48 00:02:23,540 --> 00:02:29,980 >> Most minden egyes fájl pointer funkció, vagy minden egyes fájl I / O, input-output 49 00:02:29,980 --> 00:02:33,310 funkciót, elfogadja, mint az egyik a paraméterei vagy bemenetek 50 00:02:33,310 --> 00:02:35,822 Fájl pointer-- kivéve egy, fopen, amely 51 00:02:35,822 --> 00:02:38,280 az, amit használni, hogy a fájl mutatót az első helyen. 52 00:02:38,280 --> 00:02:41,010 De miután megnyitotta a fájlt, és kapsz fájl mutatók, 53 00:02:41,010 --> 00:02:43,510 akkor majd át őket érvek a különböző funkciók 54 00:02:43,510 --> 00:02:46,720 fogunk beszélni ma, valamint sokan mások 55 00:02:46,720 --> 00:02:48,520 így dolgozni fájlokat. 56 00:02:48,520 --> 00:02:50,980 >> Szóval van hat szép közös alap is 57 00:02:50,980 --> 00:02:52,870 hogy fogunk ma beszélni. 58 00:02:52,870 --> 00:02:57,160 fopen és társa funkciót fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 és társa funkció fputc, és fread és társa funkció, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Szóval ne is menjünk bele. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- mit csinál? 63 00:03:07,050 --> 00:03:10,050 Nos, ez megnyitja a fájlt, és ez ad egy fájl mutatót úgy, 64 00:03:10,050 --> 00:03:14,000 így lehet majd használni, hogy fájlpointer érvként 65 00:03:14,000 --> 00:03:16,730 bármely más fájl I / O funkciókat. 66 00:03:16,730 --> 00:03:19,100 A legfontosabb dolog emlékezni a fopen 67 00:03:19,100 --> 00:03:24,222 az, hogy miután megnyitotta a fájl vagy egy hívást, mint az egyik itt, 68 00:03:24,222 --> 00:03:26,930 akkor ellenőrizni kell, hogy győződjön meg arról, hogy a mutató, amit kaptam vissza 69 00:03:26,930 --> 00:03:28,320 nem egyenlő null. 70 00:03:28,320 --> 00:03:31,320 Ha még nem nézte a videót mutatók, ez lehet, hogy nem sok értelme. 71 00:03:31,320 --> 00:03:35,639 De ha megpróbálod dereference null pointer visszahívás 72 00:03:35,639 --> 00:03:38,180 a program valószínűleg szenvedni szegmentációs [hallható]. 73 00:03:38,180 --> 00:03:40,540 Azt szeretnénk, hogy győződjön meg arról, hogy mi Van egy legitim mutatót vissza. 74 00:03:40,540 --> 00:03:43,665 A túlnyomó többség az idő fogunk ütött jogos mutatót vissza 75 00:03:43,665 --> 00:03:45,280 és ez nem lesz probléma. 76 00:03:45,280 --> 00:03:46,760 >> Szóval hogyan lehet hívást kezdeményezni, hogy a fopen? 77 00:03:46,760 --> 00:03:48,051 Úgy néz ki elég jól, mint ez. 78 00:03:48,051 --> 00:03:52,690 Fájl csillagos ptr-- ptr, hogy egy generikus nevet fájl pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 és átadjuk a két dolog, a fájl nevét és egy műveletet akarunk vállalni. 80 00:03:57,300 --> 00:04:01,690 Tehát lehet, hogy egy hívást, hogy néz ki, mint this-- fájl csillagos PTR 1értéke fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 És a művelet az általam kiválasztott r. 83 00:04:07,020 --> 00:04:08,639 >> Szóval mit gondolsz r van itt? 84 00:04:08,639 --> 00:04:11,180 Melyek a fajta dolog, amit képes lehet csinálni, hogy a fájlokat? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Tehát R az a művelet, hogy mi választani, ha azt akarjuk, hogy olvassa el a fájlt. 87 00:04:17,500 --> 00:04:20,260 Tehát mi lenne, ha alapvetően teszünk egy hívást, mint ez 88 00:04:20,260 --> 00:04:25,440 egyre magunknak egy fájl mutatót úgy, hogy tudnánk, akkor olvass információk 89 00:04:25,440 --> 00:04:27,770 re file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Hasonlóképpen, mi lehetett megnyitni a fájlt 2.txt írásra, és így tudjuk átadni ptr2, 91 00:04:34,190 --> 00:04:38,210 A fájl mutatót hoztam létre itt, érvként minden olyan funkciót, 92 00:04:38,210 --> 00:04:40,080 írja az információt egy fájlt. 93 00:04:40,080 --> 00:04:43,767 És hasonló írást, ott is a lehetőséget, hogy csatolja, a. 94 00:04:43,767 --> 00:04:45,600 A különbség írásban és mellékelik 95 00:04:45,600 --> 00:04:50,920 az, hogy ha írsz egy fájlba, Ha egy hívást, hogy a fopen írásra 96 00:04:50,920 --> 00:04:54,761 és hogy a fájl már létezik, ez megy, hogy felülírja a teljes fájlt. 97 00:04:54,761 --> 00:04:56,510 Meg fog kezdeni a legelején, 98 00:04:56,510 --> 00:04:58,820 törli az összes információt ez már ott van. 99 00:04:58,820 --> 00:05:02,210 >> Mivel ha kinyitja hozzáfűzve, akkor megy a végén a fájl 100 00:05:02,210 --> 00:05:04,340 ha már van egy szöveg ez vagy információ van, 101 00:05:04,340 --> 00:05:06,040 és ez lesz majd indítsa írásban onnan. 102 00:05:06,040 --> 00:05:08,570 Így nem vesznek el a információt, amit eddig csináltunk. 103 00:05:08,570 --> 00:05:12,110 Akár akarod, hogy írjon, vagy hozzáfűzni fajta helyzettől függ. 104 00:05:12,110 --> 00:05:16,840 De akkor valószínűleg tudja, mi a jobb működésre, amikor eljön az ideje. 105 00:05:16,840 --> 00:05:18,020 Szóval ez fopen. 106 00:05:18,020 --> 00:05:18,930 >> Mi a helyzet fclose? 107 00:05:18,930 --> 00:05:21,600 Nos, elég egyszerűen, fclose Csak elfogadja a fájl mutatót. 108 00:05:21,600 --> 00:05:24,000 És ahogy az várható, bezárja a fájlt. 109 00:05:24,000 --> 00:05:29,270 És ha egyszer már lezárt egy fájlt, nem tudjuk végezzen több fájl I / O funkciók, 110 00:05:29,270 --> 00:05:31,420 olvasás vagy az írás, az adott fájlt. 111 00:05:31,420 --> 00:05:36,444 Van, hogy újra megnyitja a fájlt egy másik alkalommal érdekében 112 00:05:36,444 --> 00:05:38,610 folytatni a munkát ez használ az I / O funkciókat. 113 00:05:38,610 --> 00:05:41,520 Tehát fclose eszközökkel végünk dolgozó ezt a fájlt. 114 00:05:41,520 --> 00:05:44,690 És minden, amit kell, hogy adja át a van A fájl neve mutatót. 115 00:05:44,690 --> 00:05:50,010 Tehát egy pár csúszik ezelőtt, fopened fájl 1 pont szövege olvasásra 116 00:05:50,010 --> 00:05:52,854 és mi rendelt, hogy fájlpointer hogy ptr1. 117 00:05:52,854 --> 00:05:55,020 Most úgy döntöttünk, mi vagyunk tenni az olvasást a fájlból. 118 00:05:55,020 --> 00:05:56,561 Nem kell semmilyen többet vele. 119 00:05:56,561 --> 00:05:58,890 Mi is csak fclose ptr1. 120 00:05:58,890 --> 00:06:01,950 És hasonlóképpen, tudnánk fclose a többinek. 121 00:06:01,950 --> 00:06:02,450 Minden rendben. 122 00:06:02,450 --> 00:06:03,700 Szóval ez nyitása és zárása. 123 00:06:03,700 --> 00:06:05,780 Ez a két alap beindítására. 124 00:06:05,780 --> 00:06:08,050 >> Most szeretnénk ténylegesen csinálni néhány érdekes dolgot, 125 00:06:08,050 --> 00:06:11,940 és az első funkció, hogy mi lesz látom, hogy meg fog tenni, hogy fgetc-- 126 00:06:11,940 --> 00:06:14,110 fájlt kap egy karaktert. 127 00:06:14,110 --> 00:06:17,350 Ez az, amit általában fgetc ami lefordítja. 128 00:06:17,350 --> 00:06:20,190 A célja az életben, hogy olvasd el a következő karaktert, 129 00:06:20,190 --> 00:06:22,079 vagy ha ez az igen első hívást fgetc 130 00:06:22,079 --> 00:06:23,870 Egy adott fájl, Az első karakter. 131 00:06:23,870 --> 00:06:26,210 De aztán utána, kap a következő, 132 00:06:26,210 --> 00:06:31,500 már a következő karakter az adott fájl, és eltárolja egy karakter változó. 133 00:06:31,500 --> 00:06:34,490 Ahogy itt tettetek, char ch egyenlő fgetc, 134 00:06:34,490 --> 00:06:36,389 át a fájl nevét mutató. 135 00:06:36,389 --> 00:06:38,180 Ismét, ez nagyon Fontos itt megjegyezni 136 00:06:38,180 --> 00:06:41,430 hogy annak érdekében, hogy A művelet sikeres, 137 00:06:41,430 --> 00:06:45,690 A fájl mutatót maga Biztos bontott olvasásra. 138 00:06:45,690 --> 00:06:50,589 Nem tudunk olvasni egy karaktert fájlból mutatót, hogy megnyílt az íráshoz. 139 00:06:50,589 --> 00:06:52,630 Szóval ez az egyik korlátai fopen, ugye? 140 00:06:52,630 --> 00:06:55,470 Meg kell korlátozására magunkat csak végző 141 00:06:55,470 --> 00:06:57,710 Egy művelet egy fájl mutatót. 142 00:06:57,710 --> 00:07:00,220 Ha akarnánk olvasni, és levelet ugyanabból a fájlból, 143 00:07:00,220 --> 00:07:03,840 mi lett volna nyitva két különböző fájl mutatókat azonos file-- 144 00:07:03,840 --> 00:07:05,670 Egy olvasásra, egy írásra. 145 00:07:05,670 --> 00:07:08,400 >> Tehát újra, az egyetlen ok, Hozom, hogy most van 146 00:07:08,400 --> 00:07:11,920 mert ha megyünk, hogy a hívást hogy fgetc, hogy a fájl pointer Biztos 147 00:07:11,920 --> 00:07:14,172 bontott olvasásra. 148 00:07:14,172 --> 00:07:15,880 És akkor elég egyszerűen, minden, amit tennie kell, 149 00:07:15,880 --> 00:07:17,546 van át a fájl nevét mutató. 150 00:07:17,546 --> 00:07:21,060 Tehát char ch egyenlő fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> Ez lesz, hogy minket A következő character-- 152 00:07:23,200 --> 00:07:25,575 vagy újra, ha ez az első alkalommal tettük ezt a hívást, 153 00:07:25,575 --> 00:07:29,750 Az első character-- bármilyen fájl által mutatott ptr1. 154 00:07:29,750 --> 00:07:32,210 Emlékezzünk vissza, hogy ez volt a fájl 1 pont szövegét. 155 00:07:32,210 --> 00:07:36,490 Ez kapsz az első karakter, hogy és mi tároljuk a változó ch. 156 00:07:36,490 --> 00:07:37,941 Elég egyértelmű. 157 00:07:37,941 --> 00:07:40,190 Így már csak nézett három funkciók és már azt 158 00:07:40,190 --> 00:07:43,070 tehet valamit elég ügyes. 159 00:07:43,070 --> 00:07:46,320 >> Tehát ha vesszük ezt a képességet kapok egy karakter 160 00:07:46,320 --> 00:07:48,943 és mi hurok it-- így továbbra is kap karakter 161 00:07:48,943 --> 00:07:51,390 fájlból újra és újra és over-- most 162 00:07:51,390 --> 00:07:54,500 Elolvashatja minden egyes karakter egy fájlt. 163 00:07:54,500 --> 00:07:58,670 És ha nyomtatni minden karaktert Közvetlenül azután, hogy elolvasta, 164 00:07:58,670 --> 00:08:01,960 most már olvasni egy fájlt, és nyomtatott tartalmát a képernyőn. 165 00:08:01,960 --> 00:08:05,610 Már hatékonyan összefűzött ez a fájl a képernyőn. 166 00:08:05,610 --> 00:08:09,670 És ez az, amit a Linux parancssori macska nem. 167 00:08:09,670 --> 00:08:13,250 >> Ha beírjuk macska a fájl nevét, akkor kiírja a teljes tartalmát 168 00:08:13,250 --> 00:08:15,160 A fájlt a terminál ablakban. 169 00:08:15,160 --> 00:08:19,010 És így ez a kis hurok van, csak három sornyi kódot, 170 00:08:19,010 --> 00:08:23,270 de hatékonyan megkétszerezi A Linux parancsot macska. 171 00:08:23,270 --> 00:08:25,210 Tehát ez a szintaxis talán Egy kicsit furcsa, 172 00:08:25,210 --> 00:08:26,670 de itt mi történik itt. 173 00:08:26,670 --> 00:08:31,460 Míg ch egyenlő fgetc, PTR nem egyenlő EOF-- ez egy teljesen falatot, 174 00:08:31,460 --> 00:08:34,669 de nézzük lebontani, csak így ez egyértelmű, a szintaxis. 175 00:08:34,669 --> 00:08:37,169 Már konszolidált ez kedvéért a tér, 176 00:08:37,169 --> 00:08:39,049 bár ez egy kicsit mondattanilag trükkös. 177 00:08:39,049 --> 00:08:41,194 >> Szóval ez a része a zöld a jobb Most, hogy mi csinálja? 178 00:08:41,194 --> 00:08:42,860 Nos, ez csak a mi fgetc döntök, ugye? 179 00:08:42,860 --> 00:08:44,530 Láttuk, hogy mielőtt. 180 00:08:44,530 --> 00:08:49,500 Ez megszerzésének egyik karaktert a fájl. 181 00:08:49,500 --> 00:08:53,220 Aztán összehasonlítani, hogy karakter ellen EOF. 182 00:08:53,220 --> 00:08:57,470 EOF külön értéke, hogy ez szabványban meghatározott io.h, amely 183 00:08:57,470 --> 00:08:59,390 a fájl vége karakterrel. 184 00:08:59,390 --> 00:09:03,450 Tehát alapvetően mi fog történni van ez a hurok beolvas egy karaktert, 185 00:09:03,450 --> 00:09:07,445 hasonlítsa össze a EOF, a fájl vége karakterrel. 186 00:09:07,445 --> 00:09:10,070 Ha nem egyezik, így már nem végére ért a fájl, 187 00:09:10,070 --> 00:09:11,490 fogunk nyomtatni, hogy a karakter ki. 188 00:09:11,490 --> 00:09:13,740 Akkor menj vissza a a ciklus kezdetén újra. 189 00:09:13,740 --> 00:09:18,310 Veszünk egy karaktert, ellenőrizze ellen EOF, nyomtassa ki, és így tovább 190 00:09:18,310 --> 00:09:21,094 és így tovább, és így tovább, áthurkolást ily módon 191 00:09:21,094 --> 00:09:22,760 amíg elértük a fájl végéhez. 192 00:09:22,760 --> 00:09:24,593 És akkor addigra, mi lesz a nyomtatott 193 00:09:24,593 --> 00:09:26,210 ki az egész a fájl tartalmát. 194 00:09:26,210 --> 00:09:29,450 Tehát újra, még csak láttam fopen, fclose, és fgetc 195 00:09:29,450 --> 00:09:34,950 és már tudjuk másolni Linux terminál parancsot. 196 00:09:34,950 --> 00:09:38,850 >> Mint mondtam az elején, mi volt fgetc és fputc, 197 00:09:38,850 --> 00:09:41,860 és fputc volt a társa funkciója fgetc. 198 00:09:41,860 --> 00:09:44,880 És így, ahogy lehet képzelni, ez az írás egyenértékű. 199 00:09:44,880 --> 00:09:49,440 Ez lehetővé teszi számunkra, hogy írjon egy egyetlen karakter egy fájlba. 200 00:09:49,440 --> 00:09:53,290 >> Ismét a fenntartással, hogy, csak mintha a fgetc, a fájl 201 00:09:53,290 --> 00:09:56,660 hogy írunk, hogy lehettem írásra megnyitni vagy mellékelik. 202 00:09:56,660 --> 00:10:00,820 Ha megpróbáljuk, és használja fputc egy fájlt hogy már olvasásra megnyitott, 203 00:10:00,820 --> 00:10:02,760 fogunk szenvedni Egy kis hiba. 204 00:10:02,760 --> 00:10:04,440 De a hívást elég egyszerű. 205 00:10:04,440 --> 00:10:08,000 fputc főváros Egy ptr2, minden hogy meg fog tenni az ez 206 00:10:08,000 --> 00:10:12,040 fog írni a levelet az A fájlba 2 pont 207 00:10:12,040 --> 00:10:14,760 szöveget, amely a nevét a fájlt, hogy megnyílt és hozzárendelt 208 00:10:14,760 --> 00:10:17,280 A mutatót ptr2. 209 00:10:17,280 --> 00:10:20,430 Szóval megyünk levelet tőke egy fájlba 2 pont szövegét. 210 00:10:20,430 --> 00:10:24,592 És akkor írj egy felkiáltójel pont fájlba 3 pont 211 00:10:24,592 --> 00:10:27,330 szöveg, amelyet által mutatott ptr3. 212 00:10:27,330 --> 00:10:29,730 Tehát újra, nagyon egyszerű itt. 213 00:10:29,730 --> 00:10:32,727 >> De most már nem egy másik dolog. 214 00:10:32,727 --> 00:10:34,560 Van ez a példa mi éppen megy át 215 00:10:34,560 --> 00:10:38,950 , hogy képes lemásolni a macska Linux parancssori, az egyik, hogy kiírja 216 00:10:38,950 --> 00:10:40,500 a képernyőre. 217 00:10:40,500 --> 00:10:43,510 Nos, most, hogy megvan a képessége, olvasni karaktert fájlok 218 00:10:43,510 --> 00:10:46,590 és írd karakterek fájlokat, miért nem csak helyettesíti, hogy 219 00:10:46,590 --> 00:10:50,720 hívja a printf egy hívást, hogy fputc. 220 00:10:50,720 --> 00:10:54,090 >> És most már duplikált cp, egy nagyon alap Linux parancs 221 00:10:54,090 --> 00:10:59,100 hogy beszélgettünk módon hosszú ezelőtt a Linux parancsok videót. 222 00:10:59,100 --> 00:11:01,070 Már hatékonyan sokszorosítani, hogy itt van. 223 00:11:01,070 --> 00:11:04,790 Mi olvasod egy karaktert, akkor nem vagyunk írásban, hogy a karakter egy másik fájl. 224 00:11:04,790 --> 00:11:07,660 Reading egy fájlt, írásban Egy másik, újra és újra 225 00:11:07,660 --> 00:11:11,350 és újra, amíg elérünk EOF. 226 00:11:11,350 --> 00:11:14,250 Van, hogy a végén a fájlt próbálunk másolni. 227 00:11:14,250 --> 00:11:18,500 És hogy mi lesz írva A karakter van szükségünk, hogy a fájl 228 00:11:18,500 --> 00:11:19,500 hogy mi írásban. 229 00:11:19,500 --> 00:11:24,270 Szóval ez cp, a Linux másolás parancsot. 230 00:11:24,270 --> 00:11:26,550 >> A legelején ezt a videót, az volt a kikötés 231 00:11:26,550 --> 00:11:29,840 hogy mi lenne beszélni egy kicsit mutatók. 232 00:11:29,840 --> 00:11:32,480 Itt konkrétan hol vagyunk fogok beszélni mutatók 233 00:11:32,480 --> 00:11:34,800 amellett, hogy a fájl mutatók. 234 00:11:34,800 --> 00:11:37,870 Szóval ez a funkció néz ki, milyen ijesztő. 235 00:11:37,870 --> 00:11:39,120 Van rajta néhány paramétert. 236 00:11:39,120 --> 00:11:40,430 Van egy csomó folyik itt. 237 00:11:40,430 --> 00:11:42,760 Van egy csomó más színek és szövegek. 238 00:11:42,760 --> 00:11:47,100 De tényleg, ez csak a generikus változata fgetc 239 00:11:47,100 --> 00:11:50,110 amely lehetővé teszi számunkra, hogy minden mennyiségű információt. 240 00:11:50,110 --> 00:11:53,560 Ez lehet egy kicsit nem hatékony, ha mi vagyunk egyre karakterek egyesével, 241 00:11:53,560 --> 00:11:55,770 iterációjával át a fájlt Egy karakter egy időben. 242 00:11:55,770 --> 00:12:00,230 Nem lenne szebb, hogy 100 egy időben, vagy 500 egy időben? 243 00:12:00,230 --> 00:12:03,250 >> Nos, fread és társa funkció fwrite, amely fogunk beszélni, 244 00:12:03,250 --> 00:12:05,490 egy második, lehetővé teszi számunkra, hogy nem csak ezt. 245 00:12:05,490 --> 00:12:08,480 Olvashatunk egy tetszőleges összeget Az egy fájlból 246 00:12:08,480 --> 00:12:10,290 és tároljuk valahol ideiglenesen. 247 00:12:10,290 --> 00:12:12,980 Ahelyett, hogy képes csak fér meg egy-egy változó, 248 00:12:12,980 --> 00:12:15,790 szükségünk lehet tárolni egy tömbben. 249 00:12:15,790 --> 00:12:19,980 És így haladunk, négy érvek fread-- egy mutatót 250 00:12:19,980 --> 00:12:23,940 arra a helyre, ahol mi vagyunk megy, hogy információt tároljon, 251 00:12:23,940 --> 00:12:29,180 mekkora legyen az információ egysége lesz, hány egysége információk 252 00:12:29,180 --> 00:12:35,192 akarunk szerezni, és amely fájlt szeretnénk kapni őket. 253 00:12:35,192 --> 00:12:37,150 Valószínűleg jól illusztrálja egy példa van. 254 00:12:37,150 --> 00:12:41,640 Tehát mondjuk, hogy kijelentjük egy sor 10 egészek. 255 00:12:41,640 --> 00:12:45,080 Már csak nyilvánította a verem önkényesen int tomb 10. 256 00:12:45,080 --> 00:12:46,970 Szóval ez elég egyértelmű. 257 00:12:46,970 --> 00:12:51,970 Most mit csinálunk, bár a frecall a mi olvasod mérete int 258 00:12:51,970 --> 00:12:54,180 szor 10 byte információt. 259 00:12:54,180 --> 00:12:59,040 Mérete int lény four-- ez a méret egész szám C. 260 00:12:59,040 --> 00:13:02,790 >> Szóval mit csinálunk a mi olvasod 40 bájtos információk 261 00:13:02,790 --> 00:13:05,850 A fájl által mutatott PTR. 262 00:13:05,850 --> 00:13:08,600 És mi tárolására azoknak 40 bájt valahol 263 00:13:08,600 --> 00:13:12,080 ahol már félre 40 bájtos memória. 264 00:13:12,080 --> 00:13:15,970 Szerencsére ezt már megtettük, hogy a nyilvánító arr, hogy tömb ott. 265 00:13:15,970 --> 00:13:19,770 Amely képes a gazdaság 10 négy-bájtos egységekben. 266 00:13:19,770 --> 00:13:22,860 Tehát összesen, képes tárolni 40 bájtos adatok. 267 00:13:22,860 --> 00:13:26,540 És most olvasott 40 bájt Az információt a fájlból, 268 00:13:26,540 --> 00:13:30,330 és mi tárolja azt arr. 269 00:13:30,330 --> 00:13:35,470 >> Emlékezzünk a videót a mutatók, amelyek A tömb neve, mint például arr, 270 00:13:35,470 --> 00:13:38,370 tényleg csak egy mutató az első elemére. 271 00:13:38,370 --> 00:13:43,680 Tehát amikor átadjuk az arr ott, mi vannak, sőt, átadva a mutatót. 272 00:13:43,680 --> 00:13:46,120 >> Hasonlóan tehetünk this-- Mi nem feltétlenül 273 00:13:46,120 --> 00:13:51,200 meg kell menteni a puffer a verem. 274 00:13:51,200 --> 00:13:54,990 Azt is dinamikusan osztja egy puffer, mint ez, a malloc. 275 00:13:54,990 --> 00:13:57,340 Ne feledje, ha dinamikusan memóriát foglalni, 276 00:13:57,340 --> 00:14:00,550 mi mentés a kupac, nem verem. 277 00:14:00,550 --> 00:14:02,110 De ez még mindig egy puffer. 278 00:14:02,110 --> 00:14:06,810 >> Ez még mindig, ebben az esetben, az gazdaság 640 byte-információk 279 00:14:06,810 --> 00:14:09,230 mert egy dupla vesz fel nyolc bájt. 280 00:14:09,230 --> 00:14:11,570 Illetve kérünk a 80 közülük. 281 00:14:11,570 --> 00:14:13,770 Azt akarjuk, hogy legyen hely hogy tartsa 80 páros. 282 00:14:13,770 --> 00:14:17,210 Tehát 80-szer 8 640 byte információt. 283 00:14:17,210 --> 00:14:21,880 És, hogy hívás fread van gyűjtő 640 bájtnyi információ 284 00:14:21,880 --> 00:14:27,770 A fájl által mutatott ptr, és tárolja azt most arr2. 285 00:14:27,770 --> 00:14:32,770 >> Most mi is kezelni fread mint egy hívást fgetc. 286 00:14:32,770 --> 00:14:37,140 Ebben az esetben mi csak próbálunk kap egy karaktert a fájl. 287 00:14:37,140 --> 00:14:40,070 És nem kell egy tömb, hogy tartsa egy karaktert. 288 00:14:40,070 --> 00:14:43,170 Mi is csak tárolja egy karakter változó. 289 00:14:43,170 --> 00:14:46,390 >> A fogás, de az, hogy amikor már csak egy változó, 290 00:14:46,390 --> 00:14:50,290 meg kell, hogy adja át a változó címére 291 00:14:50,290 --> 00:14:52,550 mert emlékeztetnek arra, hogy a első érv, hogy fread 292 00:14:52,550 --> 00:14:59,210 egy mutató a helyét és a memória ahol szeretnénk tárolni az adatokat. 293 00:14:59,210 --> 00:15:01,550 Ismét a nevét egy tömb egy mutató. 294 00:15:01,550 --> 00:15:04,200 Tehát nem kell tennie, és jelet tömb. 295 00:15:04,200 --> 00:15:07,270 De c, c karaktert Itt nem egy tömb. 296 00:15:07,270 --> 00:15:08,390 Ez csak egy változót. 297 00:15:08,390 --> 00:15:11,840 És ezért meg kell tennie jelet c, jelezve, 298 00:15:11,840 --> 00:15:15,350 hogy ez a cím, ahol szeretnénk hogy tárolja ezt egy byte információt, 299 00:15:15,350 --> 00:15:20,479 ez egy karakter, hogy mi gyűjt a PTR. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- átnézzük ez egy kicsit több, 301 00:15:22,270 --> 00:15:25,440 quickly-- nagyjából pontos megfelelője fread 302 00:15:25,440 --> 00:15:27,720 kivéve ez az írás olvasás helyett, csak 303 00:15:27,720 --> 00:15:31,610 mint a other-- már volt nyitva és szoros, hogy egy karaktert, 304 00:15:31,610 --> 00:15:32,530 levelet karakter. 305 00:15:32,530 --> 00:15:35,040 Most itt az, hogy az önkényes mennyiségű információt, 306 00:15:35,040 --> 00:15:37,170 jobb tetszőleges mennyiségű információ. 307 00:15:37,170 --> 00:15:39,790 Szóval csak úgy, mint korábban, nem tudjuk Van egy sor 10 egészek 308 00:15:39,790 --> 00:15:43,210 ahol már van tárolt információ, talán. 309 00:15:43,210 --> 00:15:46,580 >> Ez volt talán néhány sornyi kódot hogy kell menni a két 310 00:15:46,580 --> 00:15:49,990 ahol töltse arr a valami értelmes. 311 00:15:49,990 --> 00:15:51,880 Én töltse fel 10 különböző egész számok. 312 00:15:51,880 --> 00:15:54,920 És ahelyett, hogy mire vagyok Ennek az írásbeli arr 313 00:15:54,920 --> 00:15:58,600 és információk begyűjtése arr. 314 00:15:58,600 --> 00:16:02,390 És én viszem ezt az információt és üzembe helyezése a fájlt. 315 00:16:02,390 --> 00:16:05,410 >> Így ahelyett, hogy azt honnan A fájlt a puffert, 316 00:16:05,410 --> 00:16:08,790 mi most megy a a puffer a fájlt. 317 00:16:08,790 --> 00:16:10,580 Tehát csak fordítva. 318 00:16:10,580 --> 00:16:16,680 Tehát újra, csak úgy, mint korábban, nem tudjuk is van egy halom darab memória 319 00:16:16,680 --> 00:16:19,600 hogy már dinamikusan kiosztott és olvasni, hogy 320 00:16:19,600 --> 00:16:21,570 és azt írja, hogy a fájl. 321 00:16:21,570 --> 00:16:24,900 >> És mi is van egy változó képes a gazdaság egy byte 322 00:16:24,900 --> 00:16:27,200 az információk, mint például egy karaktert. 323 00:16:27,200 --> 00:16:29,830 De ismétlem, meg kell, hogy adja át a A változó címére 324 00:16:29,830 --> 00:16:31,840 ha azt akarjuk, hogy olvassa el azt. 325 00:16:31,840 --> 00:16:35,280 Így tudjuk írni az információkat találunk arra a címre 326 00:16:35,280 --> 00:16:39,050 A fájl mutatót, ptr. 327 00:16:39,050 --> 00:16:41,630 >> Van sok más nagy file I / O funkciók 328 00:16:41,630 --> 00:16:44,650 amelyek különböző dolgok mellett az is beszéltünk ma. 329 00:16:44,650 --> 00:16:46,450 Pár azok lehet hasznos 330 00:16:46,450 --> 00:16:50,840 a fgets és fputs, amelyek az egyenértékű 331 00:16:50,840 --> 00:16:56,190 A fgetc és fputc de az olvasás egyetlen karakterlánc fájlból. 332 00:16:56,190 --> 00:16:59,020 Ahelyett, hogy egy karakter, akkor olvastam egy egész szöveget. 333 00:16:59,020 --> 00:17:02,940 fprintf, ami alapvetően lehetővé teszi, hogy használja printf, hogy a fájlba. 334 00:17:02,940 --> 00:17:05,619 Szóval, mint amit tehetünk a változó helyettesítés 335 00:17:05,619 --> 00:17:09,900 helyőrzővel százalékkal i és százalék d, és így tovább, a printf 336 00:17:09,900 --> 00:17:14,690 akkor hasonlóképpen tegyen a printf string és a nyomtatási valamit 337 00:17:14,690 --> 00:17:16,800 mint, hogy egy fájlt. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- ha van egy DVD-lejátszó az analógia szoktam használni here-- 339 00:17:20,720 --> 00:17:23,109 a fajta, mint használja a áttekercselés 340 00:17:23,109 --> 00:17:25,819 gombok segítségével mozoghat a filmet. 341 00:17:25,819 --> 00:17:28,369 Hasonlóképpen lehet mozogni a fájlt. 342 00:17:28,369 --> 00:17:30,250 Az egyik dolog benne hogy a fájl szerkezetét 343 00:17:30,250 --> 00:17:34,270 hogy c teremt az Ön számára egy olyan mutató, hogy hol van a fájl. 344 00:17:34,270 --> 00:17:36,420 Ön a nagyon kezdődő, a byte nulla? 345 00:17:36,420 --> 00:17:39,290 Ön a byte-100, bájt 1000, és így tovább? 346 00:17:39,290 --> 00:17:44,340 Használhatja fseek önkényesen mozog ezt a mutatót előre vagy hátra. 347 00:17:44,340 --> 00:17:46,744 >> És ftell, újra hasonló a DVD-lejátszó, 348 00:17:46,744 --> 00:17:49,660 olyan, mint egy kis órát, ami megmondja hány perc és másodperc Önnek 349 00:17:49,660 --> 00:17:52,480 van egy adott filmet. 350 00:17:52,480 --> 00:17:56,990 Hasonlóképpen, ftell megmondja, hogyan hány bájt van a fájl. 351 00:17:56,990 --> 00:18:00,210 feof egy másik verziója felderítése Akár már 352 00:18:00,210 --> 00:18:01,700 végére ért a fájl. 353 00:18:01,700 --> 00:18:03,600 És ferror függvénye hogy tudod használni 354 00:18:03,600 --> 00:18:06,959 felismerni, hogy valamit elrontottunk dolgozik egy fájlt. 355 00:18:06,959 --> 00:18:08,750 Ismét, ez csak vakarja a felületet. 356 00:18:08,750 --> 00:18:12,730 Van még bőven több fájl I / O funkciók a standard io.h. 357 00:18:12,730 --> 00:18:16,620 De ez valószínűleg neked kezdett dolgozni fájl mutató. 358 00:18:16,620 --> 00:18:17,640 Én Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 Ez CS50. 360 00:18:19,750 --> 00:18:21,669