1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> SPEAKER: Toistaiseksi se on todennäköisesti että useimmat ohjelmat 3 00:00:07,870 --> 00:00:10,170 on ollut hieman lyhytaikaisia. 4 00:00:10,170 --> 00:00:13,310 Voit suorittaa ohjelman kuten Mario tai ahne. 5 00:00:13,310 --> 00:00:17,350 Se tekee jotain, se ehkä kysyy käyttäjän joitakin tietoja, 6 00:00:17,350 --> 00:00:20,400 tulostaa joitakin tulosteita, mutta sitten kun ohjelma on ohi, 7 00:00:20,400 --> 00:00:23,252 siellä oikeastaan ​​mitään todisteita siellä se oli koskaan ajaa ensiksi. 8 00:00:23,252 --> 00:00:25,960 Tarkoitan, varmasti, olet ehkä jäljellä se avautuu pääteikkunaa 9 00:00:25,960 --> 00:00:29,770 mutta jos tyhjentää näytön, siellä oikeastaan ​​mitään todisteita siitä, että se oli olemassa. 10 00:00:29,770 --> 00:00:33,720 Meillä ei ole tallentavat pysyviä tietoja, tiedot 11 00:00:33,720 --> 00:00:36,890 että olemassa jälkeen meidän Ohjelma on pysähtynyt, 12 00:00:36,890 --> 00:00:39,241 tai emme ole tähän asti. 13 00:00:39,241 --> 00:00:41,490 Onneksi kuitenkin, C ei meille mahdollisuuden 14 00:00:41,490 --> 00:00:44,220 tehdä tämän toteuttamalla jotain kutsutaan 15 00:00:44,220 --> 00:00:48,330 tiedosto, rakenne, joka periaatteessa edustaa tiedosto kaksinkertaistuisi 16 00:00:48,330 --> 00:00:53,826 klikkaa tietokoneeseen, jos olet käyttää graafinen ympäristö. 17 00:00:53,826 --> 00:00:55,700 Yleensä kun työ C, olemme todella 18 00:00:55,700 --> 00:00:59,965 tulevat työskentelemään kanssa viitteitä files-- tiedosto stars-- 19 00:00:59,965 --> 00:01:02,090 lukuun ottamatta hieman kun puhumme pari 20 00:01:02,090 --> 00:01:04,560 toimintoja, jotka työskennellä tiedosto viitteitä. 21 00:01:04,560 --> 00:01:08,990 Sinun ei tarvitse olla todella kaivettiin liian syvälle ymmärrys osoittimet 22 00:01:08,990 --> 00:01:09,730 itse. 23 00:01:09,730 --> 00:01:12,870 Siellä on pieni pikkuinen vähän jossa puhumme niistä, 24 00:01:12,870 --> 00:01:18,090 mutta yleensä tiedosto osoittimet ja osoittimet, kun taas toisiinsa, 25 00:01:18,090 --> 00:01:20,290 eivät ole täsmälleen sama asia. 26 00:01:20,290 --> 00:01:22,440 >> Nyt mitä tarkoitan kun Sanon pysyviä tietoja? 27 00:01:22,440 --> 00:01:23,650 Mikä on pysyviä tietoja? 28 00:01:23,650 --> 00:01:25,232 Miksi me välitä siitä? 29 00:01:25,232 --> 00:01:27,190 Sano esimerkiksi, että käytät ohjelma 30 00:01:27,190 --> 00:01:29,850 tai olet uusiksi ohjelma, joka on peli, 31 00:01:29,850 --> 00:01:32,960 ja haluat seurata kaikki käyttäjän liikkuu 32 00:01:32,960 --> 00:01:36,620 joten ehkä jos jokin menee pieleen, voit tarkistaa tiedoston pelin jälkeen. 33 00:01:36,620 --> 00:01:39,970 Sitähän me tarkoitamme, kun me puhua pysyviä tietoja. 34 00:01:39,970 --> 00:01:43,930 >> Aikana käynnissä ohjelma, tiedosto luodaan. 35 00:01:43,930 --> 00:01:45,680 Ja kun ohjelma on pysähtynyt, 36 00:01:45,680 --> 00:01:48,689 että tiedosto on edelleen olemassa järjestelmässä. 37 00:01:48,689 --> 00:01:50,230 Ja voimme katsoa sitä ja tutkia sitä. 38 00:01:50,230 --> 00:01:53,670 Ja jotta ohjelma olisi asetettu ovat luoneet pysyviä tietoja, 39 00:01:53,670 --> 00:01:57,390 tiedot ovat olemassa, kun ohjelma on päättynyt. 40 00:01:57,390 --> 00:02:02,320 >> Nyt kaikki nämä toiminnot, jotka toimivat luomisessa tiedostoja ja manipuloida 41 00:02:02,320 --> 00:02:04,940 niitä eri tavoin elävät vakio io.h, 42 00:02:04,940 --> 00:02:08,210 joka on header tiedosto, joka olet todennäköisesti ollut punnan 43 00:02:08,210 --> 00:02:10,910 myös yläosassa melko paljon kaikki ohjelmat 44 00:02:10,910 --> 00:02:14,130 koska se sisältää yhden eniten hyödyllisiä toimintoja meille, 45 00:02:14,130 --> 00:02:16,130 printf, että myös avulla asuu vakio io.h. 46 00:02:16,130 --> 00:02:20,400 Joten sinun ei tarvitse punta sisällyttää muita tiedostoja luultavasti 47 00:02:20,400 --> 00:02:23,540 voidakseen työskennellä tiedostojen viitteitä. 48 00:02:23,540 --> 00:02:29,980 >> Nyt jokainen tiedosto osoitin toiminto, tai joka ikinen tiedosto I / O, Input Output 49 00:02:29,980 --> 00:02:33,310 toiminto, hyväksyy yhtenä sen parametrit tai tuotantopanosten 50 00:02:33,310 --> 00:02:35,822 Tiedoston pointer-- paitsi yksi, fopen, joka 51 00:02:35,822 --> 00:02:38,280 on mitä käytät saada tiedosto osoitin ensiksi. 52 00:02:38,280 --> 00:02:41,010 Mutta kun olet avannut tiedosto ja saat tiedosto viitteitä, 53 00:02:41,010 --> 00:02:43,510 voit sitten siirtää niitä argumentteja eri toimintojen 54 00:02:43,510 --> 00:02:46,720 aiomme puhua tänään, samoin kuin monet muut 55 00:02:46,720 --> 00:02:48,520 jotta voit työskennellä tiedostoja. 56 00:02:48,520 --> 00:02:50,980 >> Joten on kuusi melko Yhteisten niistä 57 00:02:50,980 --> 00:02:52,870 että me aiomme puhua tänään. 58 00:02:52,870 --> 00:02:57,160 fopen ja sen seuralainen toiminto fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 ja sen seuralainen toiminto fputc, ja fread ja sen seuralainen toiminto, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Joten saada oikeutta siihen. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- mitä se tekee? 63 00:03:07,050 --> 00:03:10,050 No, se avaa tiedoston ja se antaa sinulle tiedoston osoitin sen, 64 00:03:10,050 --> 00:03:14,000 jotta voit käyttää tätä tiedoston osoitin argumenttina 65 00:03:14,000 --> 00:03:16,730 Minkä tahansa muiden tiedostojen I / O-toimintoja. 66 00:03:16,730 --> 00:03:19,100 Kaikkein tärkein asia muistaa kanssa fopen 67 00:03:19,100 --> 00:03:24,222 on, että kun olet avannut tiedostoon tai teki puhelun kuin yksi täällä, 68 00:03:24,222 --> 00:03:26,930 sinun täytyy varmista että osoitin että sait takaisin 69 00:03:26,930 --> 00:03:28,320 ei ole yhtä suuri null. 70 00:03:28,320 --> 00:03:31,320 Jos et ole katsellut video osoittimet, tämä ei välttämättä ole järkeä. 71 00:03:31,320 --> 00:03:35,639 Mutta jos yrität ja dereference nollaosoittimen muistaa, 72 00:03:35,639 --> 00:03:38,180 ohjelma todennäköisesti kärsimään segmentointi [kuultavissa]. 73 00:03:38,180 --> 00:03:40,540 Haluamme varmistaa, että meillä sai laillinen osoitin takaisin. 74 00:03:40,540 --> 00:03:43,665 Valtaosa ajasta me ovat saaneet oikeutettu osoitin takaisin 75 00:03:43,665 --> 00:03:45,280 ja se ei ole ongelma. 76 00:03:45,280 --> 00:03:46,760 >> Miten siis soittaa fopen? 77 00:03:46,760 --> 00:03:48,051 Se näyttää melko paljon kuin tämä. 78 00:03:48,051 --> 00:03:52,690 Tiedoston tähden ptr-- ptr on geneerinen nimetä tiedostojen pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 ja ohitamme kaksi asiaa, tiedoston nimi ja toiminta haluamme toteuttaa. 80 00:03:57,300 --> 00:04:01,690 Joten saatamme olla puhelu, joka näyttää this-- tiedosto tähti PTR 1 vastaa fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 Ja toimenpide olen valinnut on r. 83 00:04:07,020 --> 00:04:08,639 >> Mitä luulet r on täällä? 84 00:04:08,639 --> 00:04:11,180 Mitkä ovat erilaisia ​​asioita ehkä tehdä tiedostoja? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Joten r on toimintaa, että me valita, milloin haluamme lukea tiedostoa. 87 00:04:17,500 --> 00:04:20,260 Joten olisimme periaatteessa kun me soittaa näin 88 00:04:20,260 --> 00:04:25,440 saamaan itsemme tiedoston osoitin niin että voisimme sitten lukea tietoja 89 00:04:25,440 --> 00:04:27,770 alkaen file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Samoin, voisimme avata tiedoston 2.txt kirjoitus- ja jotta voimme välittää ptr2, 91 00:04:34,190 --> 00:04:38,210 tiedosto osoitin Olen luonut täällä, argumenttina jokin toiminto 92 00:04:38,210 --> 00:04:40,080 kirjoittaa tiedot tiedostoon. 93 00:04:40,080 --> 00:04:43,767 Ja samanlainen kirjallisesti, siellä myös mahdollisuus liittää,. 94 00:04:43,767 --> 00:04:45,600 Ero kirjallisesti ja liittämällä 95 00:04:45,600 --> 00:04:50,920 on, että kun kirjoitat tiedostoon, jos soittaa fopen kirjoittamiseen 96 00:04:50,920 --> 00:04:54,761 ja että tiedosto on jo olemassa, se on menossa korvata koko tiedoston. 97 00:04:54,761 --> 00:04:56,510 Se tulee aloittaa aivan alussa, 98 00:04:56,510 --> 00:04:58,820 poistaa kaikki tiedot joka on jo olemassa. 99 00:04:58,820 --> 00:05:02,210 >> Ottaa huomioon, että jos avaat sen liittämällä, se menee loppuun tiedoston 100 00:05:02,210 --> 00:05:04,340 jos on jo tekstiä se tai sen sisältämä tieto, 101 00:05:04,340 --> 00:05:06,040 ja se sitten alkaa kirjallisesti sieltä. 102 00:05:06,040 --> 00:05:08,570 Joten et menetä mitään tietoja, jotka olet tehnyt ennen. 103 00:05:08,570 --> 00:05:12,110 Haluatko kirjoittaa tai liittää tavallaan riippuu tilanteesta. 104 00:05:12,110 --> 00:05:16,840 Mutta luultavasti tietää mitä oikea toiminta on, kun sen aika tulee. 105 00:05:16,840 --> 00:05:18,020 Niin, että fopen. 106 00:05:18,020 --> 00:05:18,930 >> Entä fclose? 107 00:05:18,930 --> 00:05:21,600 No, ihan yksinkertaisesti, fclose vain hyväksyy tiedoston osoitin. 108 00:05:21,600 --> 00:05:24,000 Ja kuten arvata saattaa, se sulkee tiedoston. 109 00:05:24,000 --> 00:05:29,270 Ja kun olemme suljettu tiedoston, emme voi suorittaa enää tiedoston I / O-toimintojen, 110 00:05:29,270 --> 00:05:31,420 tai lukee, kyseisestä tiedostosta. 111 00:05:31,420 --> 00:05:36,444 Meidän täytyy avata uudelleen tiedoston toisen kerran, jotta 112 00:05:36,444 --> 00:05:38,610 jatkamaan työtä sitä käyttämällä I / O-toimintoja. 113 00:05:38,610 --> 00:05:41,520 Joten fclose avulla olemme tehneet työskennellä tämän tiedoston. 114 00:05:41,520 --> 00:05:44,690 Ja kaikki meidän täytyy kulkea on tiedoston nimi osoittimen. 115 00:05:44,690 --> 00:05:50,010 Joten pari liukuu sitten, me fopened tiedosto 1 piste tekstin lukemiseen 116 00:05:50,010 --> 00:05:52,854 ja me määritetty että tiedosto osoitin ptr1. 117 00:05:52,854 --> 00:05:55,020 Nyt olemme päättäneet olemme tehty lukemisen tiedoston. 118 00:05:55,020 --> 00:05:56,561 Emme tarvitse tehdä enää sen kanssa. 119 00:05:56,561 --> 00:05:58,890 Voimme vain fclose ptr1. 120 00:05:58,890 --> 00:06:01,950 Ja vastaavasti voisi me FSulje toisilla. 121 00:06:01,950 --> 00:06:02,450 Selvä. 122 00:06:02,450 --> 00:06:03,700 Jotta avaus ja sulkeminen. 123 00:06:03,700 --> 00:06:05,780 Ne ovat kaksi perus toiminnan aloittamista. 124 00:06:05,780 --> 00:06:08,050 >> Nyt haluamme todella tehdä joitakin mielenkiintoisia juttuja, 125 00:06:08,050 --> 00:06:11,940 ja ensimmäinen toiminto että me will nähdä, että tekee se on fgetc-- 126 00:06:11,940 --> 00:06:14,110 tiedosto saada merkin. 127 00:06:14,110 --> 00:06:17,350 Sitähän fgetc yleensä olisi kääntää. 128 00:06:17,350 --> 00:06:20,190 Sen tavoitteena elämässä on Lue seuraava merkki, 129 00:06:20,190 --> 00:06:22,079 tai jos tämä on hyvin Ensimmäinen puhelu fgetc 130 00:06:22,079 --> 00:06:23,870 tietyn tiedoston, ensimmäinen merkki. 131 00:06:23,870 --> 00:06:26,210 Mutta sitten sen jälkeen, saat seuraava, 132 00:06:26,210 --> 00:06:31,500 hyvin seuraavan merkin kyseisen tiedoston, ja tallentaa sen merkin muuttujaan. 133 00:06:31,500 --> 00:06:34,490 Kuten olemme tehneet täällä, char ch vastaa fgetc, 134 00:06:34,490 --> 00:06:36,389 pass nimissä tiedoston osoitin. 135 00:06:36,389 --> 00:06:38,180 Taaskin se on hyvin tärkeää täällä muistaa 136 00:06:38,180 --> 00:06:41,430 että jotta on tämä operaatio onnistuu, 137 00:06:41,430 --> 00:06:45,690 tiedosto osoitin itse varmaan avattu lukemista varten. 138 00:06:45,690 --> 00:06:50,589 Emme voi lukea merkin tiedostosta osoitin, että avasimme kirjoittamista varten. 139 00:06:50,589 --> 00:06:52,630 Joten se on yksi rajoitukset fopen, eikö? 140 00:06:52,630 --> 00:06:55,470 Meidän on rajoittaa itseämme vain suorittamista 141 00:06:55,470 --> 00:06:57,710 yksi kanssa yhden tiedoston osoitin. 142 00:06:57,710 --> 00:07:00,220 Jos halusimme lukea ja kirjoittaa samasta tiedostosta, 143 00:07:00,220 --> 00:07:03,840 meillä olisi auki kaksi erillistä tiedosto viitteitä samaan file-- 144 00:07:03,840 --> 00:07:05,670 yksi lukemiseen, yksi kirjoittamista varten. 145 00:07:05,670 --> 00:07:08,400 >> Joten jälleen, ainoa syy Tuon että nyt on 146 00:07:08,400 --> 00:07:11,920 koska jos aiomme soittaa sen fgetc, että tiedosto osoitin täytynyt 147 00:07:11,920 --> 00:07:14,172 avattu lukemista varten. 148 00:07:14,172 --> 00:07:15,880 Ja sitten melko yksinkertaisesti, kaikki meidän täytyy tehdä 149 00:07:15,880 --> 00:07:17,546 on kulkea tiedoston nimi osoittimen. 150 00:07:17,546 --> 00:07:21,060 Joten char ch vastaa fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> Että menee saada meidät seuraava character-- 152 00:07:23,200 --> 00:07:25,575 tai uudelleen, jos tämä on ensimmäinen kerta, kun olemme tehneet tämän puhelun, 153 00:07:25,575 --> 00:07:29,750 ensimmäinen character-- riippumatta tiedosto on osoitteen sivulle ptr1. 154 00:07:29,750 --> 00:07:32,210 Muista, että se oli tiedosto 1 piste tekstiä. 155 00:07:32,210 --> 00:07:36,490 Se saat ensimmäisen merkin, joka ja me tallentaa sen muuttujaan ch. 156 00:07:36,490 --> 00:07:37,941 Melko yksinkertainen. 157 00:07:37,941 --> 00:07:40,190 Joten olemme vain katseli kolme toiminnot ja jo me 158 00:07:40,190 --> 00:07:43,070 voi tehdä jotain ihan siisti. 159 00:07:43,070 --> 00:07:46,320 >> Joten jos otamme tämän mahdollisuuden saada merkki 160 00:07:46,320 --> 00:07:48,943 ja me silmukka it-- niin me edelleen saada merkkiä 161 00:07:48,943 --> 00:07:51,390 tiedostosta yli ja yli ja over-- nyt 162 00:07:51,390 --> 00:07:54,500 voi lukea jokaisen luonnetta tiedoston. 163 00:07:54,500 --> 00:07:58,670 Ja jos me tulostaa jokaisen merkin heti kun lukea sitä, 164 00:07:58,670 --> 00:08:01,960 olemme nyt luetaan tiedostosta ja painettu sen sisällön näytön. 165 00:08:01,960 --> 00:08:05,610 Olemme tehokkaasti ketjutettujen että tiedosto ruudulla. 166 00:08:05,610 --> 00:08:09,670 Ja sitähän Linux komento kissa tekee. 167 00:08:09,670 --> 00:08:13,250 >> Jos kirjoitat kissa tiedoston nimi, se tulostaa koko sisältö 168 00:08:13,250 --> 00:08:15,160 tiedoston oman pääteikkunassa. 169 00:08:15,160 --> 00:08:19,010 Ja niin tämä pieni silmukka täällä, vain kolme riviä koodia, 170 00:08:19,010 --> 00:08:23,270 mutta sitä tehokkaasti päällekkäinen Linux komento kissa. 171 00:08:23,270 --> 00:08:25,210 Joten tämä syntaksi pitää näyttää hieman outo, 172 00:08:25,210 --> 00:08:26,670 mutta tässä mitä täällä tapahtuu. 173 00:08:26,670 --> 00:08:31,460 Vaikka ch vastaa fgetc, PTR ei ole sama EOF-- se on koko suupala, 174 00:08:31,460 --> 00:08:34,669 mutta katsotaan murtaa se alas vain joten se selväksi syntaksin. 175 00:08:34,669 --> 00:08:37,169 Olen konsolidoitu sen vuoksi tilaa, 176 00:08:37,169 --> 00:08:39,049 vaikka se on vähän syntaktisesti hankala. 177 00:08:39,049 --> 00:08:41,194 >> Joten tämä osa vihreä oikeassa nyt, mitä se tekee? 178 00:08:41,194 --> 00:08:42,860 No, se on vain meidän fgetc soittaa, eikö? 179 00:08:42,860 --> 00:08:44,530 Olemme nähneet, että ennen. 180 00:08:44,530 --> 00:08:49,500 Se saadakseen yhtä hahmo tiedosto. 181 00:08:49,500 --> 00:08:53,220 Sitten vertaamme että merkki vastaan ​​EOF. 182 00:08:53,220 --> 00:08:57,470 EOF on erityinen arvo, joka on määritelty standardissa io.h, joka 183 00:08:57,470 --> 00:08:59,390 on tiedoston loppuun luonnetta. 184 00:08:59,390 --> 00:09:03,450 Joten periaatteessa mitä tulee tapahtumaan on tämä silmukka lukee hahmo, 185 00:09:03,450 --> 00:09:07,445 vertaa sitä EOF, tiedoston loppuun luonnetta. 186 00:09:07,445 --> 00:09:10,070 Jos ne eivät täsmää, joten meillä ei lopussa tiedoston, 187 00:09:10,070 --> 00:09:11,490 me tulostaa että hahmosi ulos. 188 00:09:11,490 --> 00:09:13,740 Sitten menemme takaisin alussa silmukan uudelleen. 189 00:09:13,740 --> 00:09:18,310 Saamme merkin, tarkista vastaan ​​EOF, tulostaa sen, ja niin edelleen 190 00:09:18,310 --> 00:09:21,094 ja niin edelleen ja niin edelleen, looping kautta tällä tavalla 191 00:09:21,094 --> 00:09:22,760 kunnes olemme saavuttaneet tiedoston loppuun. 192 00:09:22,760 --> 00:09:24,593 Ja sitten siihen mennessä, olemme painettu 193 00:09:24,593 --> 00:09:26,210 ulos koko tiedoston sisältö. 194 00:09:26,210 --> 00:09:29,450 Joten jälleen olemme vain nähneet fopen, fclose, ja fgetc 195 00:09:29,450 --> 00:09:34,950 ja jo voimme monistaa Linux terminaaliin komento. 196 00:09:34,950 --> 00:09:38,850 >> Kuten sanoin alussa, meillä oli fgetc ja fputc, 197 00:09:38,850 --> 00:09:41,860 ja fputc oli seuralainen funktio fgetc. 198 00:09:41,860 --> 00:09:44,880 Ja niin, kuin voisi kuvitella, se on kirjallisesti vastaava. 199 00:09:44,880 --> 00:09:49,440 Se antaa meille mahdollisuuden kirjoittaa yhden merkin tiedostoon. 200 00:09:49,440 --> 00:09:53,290 >> Jälleen varoitus on, vain kuin se oli kanssa fgetc, tiedosto 201 00:09:53,290 --> 00:09:56,660 että me kirjallisesti täytynyt olla avataan kirjoittamista tai liittämällä. 202 00:09:56,660 --> 00:10:00,820 Jos yritämme käyttää fputc tiedostoa että olemme avataan lukemista, 203 00:10:00,820 --> 00:10:02,760 aiomme kärsiä hieman virhe. 204 00:10:02,760 --> 00:10:04,440 Mutta puhelu on melko yksinkertainen. 205 00:10:04,440 --> 00:10:08,000 fputc pääoman ptr2, kaikki joka tulee tehdä, on se 206 00:10:08,000 --> 00:10:12,040 menossa kirjoittaa kirjettä osaksi tiedostoon 2 dot 207 00:10:12,040 --> 00:10:14,760 teksti, joka oli nimi aineistosta ilmenee, että avasimme ja osoitetaan 208 00:10:14,760 --> 00:10:17,280 osoitin ptr2. 209 00:10:17,280 --> 00:10:20,430 Joten aiomme kirjoittaa pääoma tiedostoon 2 pisteen tekstiä. 210 00:10:20,430 --> 00:10:24,592 Ja me kirjoittaa huudahdus kohta tiedostoon 3 piste 211 00:10:24,592 --> 00:10:27,330 teksti, joka on osoitteen sivulle ptr3. 212 00:10:27,330 --> 00:10:29,730 Joten jälleen, melko suoraviivaista täällä. 213 00:10:29,730 --> 00:10:32,727 >> Mutta nyt voimme tehdä toinen asia. 214 00:10:32,727 --> 00:10:34,560 Meillä on tässä esimerkissä olimme juuri menossa yli 215 00:10:34,560 --> 00:10:38,950 olemisesta pysty jäljittelemään kissa Linux komento, joka tulostaa 216 00:10:38,950 --> 00:10:40,500 näyttöön. 217 00:10:40,500 --> 00:10:43,510 No, nyt, että meillä on mahdollisuus lukemaan merkkejä tiedostoista 218 00:10:43,510 --> 00:10:46,590 ja kirjoittaa merkkiä tiedostoja, miksi emme vain korvata, että 219 00:10:46,590 --> 00:10:50,720 soittaa printf kanssa puhelun fputc. 220 00:10:50,720 --> 00:10:54,090 >> Ja nyt olemme monistaa cp, hyvin yksinkertainen linux komento 221 00:10:54,090 --> 00:10:59,100 että puhuimme miten pitkän sitten Linux komennot video. 222 00:10:59,100 --> 00:11:01,070 Olemme tehokkaasti kahdennettu että täällä. 223 00:11:01,070 --> 00:11:04,790 Me luet merkki ja sitten olemme kirjallisesti, että merkin toiseen tiedostoon. 224 00:11:04,790 --> 00:11:07,660 Lukeminen tiedostosta, kirjoittaminen toiseen, yli ja yli 225 00:11:07,660 --> 00:11:11,350 ja uudestaan, kunnes me osuma EOF. 226 00:11:11,350 --> 00:11:14,250 Meillä loppuun tiedosto yritämme kopioida. 227 00:11:14,250 --> 00:11:18,500 Ja että me kirjoittanut kaikki merkkien meidän tiedosto 228 00:11:18,500 --> 00:11:19,500 että me kirjallisesti. 229 00:11:19,500 --> 00:11:24,270 Joten tämä on cp, Linux kopiointikomentoa. 230 00:11:24,270 --> 00:11:26,550 >> Vuoden alusta Tämän videon, minulla oli varoitus 231 00:11:26,550 --> 00:11:29,840 että juttelimme vähän tietoa viitteitä. 232 00:11:29,840 --> 00:11:32,480 Tässä on nimenomaan missä olemme aio puhua viitteitä 233 00:11:32,480 --> 00:11:34,800 lisäksi tiedostoon viitteitä. 234 00:11:34,800 --> 00:11:37,870 Joten tämä toiminto näyttää pelottavalta. 235 00:11:37,870 --> 00:11:39,120 Se sai useita parametreja. 236 00:11:39,120 --> 00:11:40,430 Siellä on paljon täällä. 237 00:11:40,430 --> 00:11:42,760 Siellä on paljon erilaisia värejä ja tekstejä. 238 00:11:42,760 --> 00:11:47,100 Mutta oikeasti, se on vain geneeristä fgetc 239 00:11:47,100 --> 00:11:50,110 jonka avulla voimme saada mitään määrä tietoa. 240 00:11:50,110 --> 00:11:53,560 Se voi olla hieman tehotonta, jos olemme saada merkit yksi kerrallaan, 241 00:11:53,560 --> 00:11:55,770 iteroimalla läpi tiedosto yksi merkki kerrallaan. 242 00:11:55,770 --> 00:12:00,230 Eikö olisi mukavampaa saada 100 kerrallaan tai 500 kerrallaan? 243 00:12:00,230 --> 00:12:03,250 >> No, fread ja sen seuralainen toiminto fwrite, joka me puhumme 244 00:12:03,250 --> 00:12:05,490 toisessa, jotta voisimme tehdä juuri niin. 245 00:12:05,490 --> 00:12:08,480 Voimme lukea mielivaltaisen määrän Tietojen tiedostosta 246 00:12:08,480 --> 00:12:10,290 ja me tallentaa sen jonnekin tilapäisesti. 247 00:12:10,290 --> 00:12:12,980 Sen sijaan, että voimme vain asenna se yhden muuttujan, 248 00:12:12,980 --> 00:12:15,790 saatamme tarvita tallenna se jono. 249 00:12:15,790 --> 00:12:19,980 Ja niin, välitämme neljässä argumentteja fread-- osoitin 250 00:12:19,980 --> 00:12:23,940 paikkaan, johon olemme menossa tallentaa tietoa, 251 00:12:23,940 --> 00:12:29,180 kuinka suuri kukin tiedon yksikkö on, kuinka monta yksikköä tietoa 252 00:12:29,180 --> 00:12:35,192 haluamme hankkia, ja joka tiedosto haluamme saada ne. 253 00:12:35,192 --> 00:12:37,150 Kuvaa ehkä parhaiten esimerkin tästä. 254 00:12:37,150 --> 00:12:41,640 Joten sanotaan, että julistamme joukko 10 kokonaislukuja. 255 00:12:41,640 --> 00:12:45,080 Olemme juuri ilmoitettu pino mielivaltaisesti int sov 10. 256 00:12:45,080 --> 00:12:46,970 Niin se on melko yksinkertainen. 257 00:12:46,970 --> 00:12:51,970 Nyt mitä teemme kuitenkin on frecall on me luet koko int 258 00:12:51,970 --> 00:12:54,180 kertaa 10 tavua informaatiota. 259 00:12:54,180 --> 00:12:59,040 Koko int olennon four-- se koko kokonaisluku C. 260 00:12:59,040 --> 00:13:02,790 >> Joten mitä teemme on meidän luet 40 tavua arvoinen tiedot 261 00:13:02,790 --> 00:13:05,850 tiedostosta osoitteen sivulle PTR. 262 00:13:05,850 --> 00:13:08,600 Ja me tallentamiseen ne 40 tavua jonnekin 263 00:13:08,600 --> 00:13:12,080 jossa olemme varautuneet 40 tavua arvoinen muistia. 264 00:13:12,080 --> 00:13:15,970 Onneksi olemme jo tehneet, että julistamisesta sov, että array oikeassa. 265 00:13:15,970 --> 00:13:19,770 Joka pystyy tilan 10 neljän tavun yksikköä. 266 00:13:19,770 --> 00:13:22,860 Joten yhteensä, se mahtuu 40 tavua arvoinen tietoja. 267 00:13:22,860 --> 00:13:26,540 Ja nyt käsittelyssä 40 tavua Tietojen tiedostosta, 268 00:13:26,540 --> 00:13:30,330 ja olemme tallentamalla sen sov. 269 00:13:30,330 --> 00:13:35,470 >> Muistamme video viitteitä, että nimi array, kuten sov, 270 00:13:35,470 --> 00:13:38,370 on oikeastaan ​​vain osoitin sen ensimmäinen elementti. 271 00:13:38,370 --> 00:13:43,680 Joten kun me kulkea sov siellä, me ovat itse asiassa ohimennen osoitin. 272 00:13:43,680 --> 00:13:46,120 >> Samoin voimme tehdä this-- emme välttämättä 273 00:13:46,120 --> 00:13:51,200 täytyy pelastaa puskuri pinoon. 274 00:13:51,200 --> 00:13:54,990 Voisimme myös dynaamisesti varata puskuri näin, käyttäen malloc. 275 00:13:54,990 --> 00:13:57,340 Muista, kun dynaamisesti varata muistia, 276 00:13:57,340 --> 00:14:00,550 säästämme sen kasaan, ei pino. 277 00:14:00,550 --> 00:14:02,110 Mutta se on silti puskuri. 278 00:14:02,110 --> 00:14:06,810 >> Se vielä, tässä tapauksessa on tilalla 640 tavua tietoja 279 00:14:06,810 --> 00:14:09,230 koska kaksinkertainen vie kahdeksan tavua. 280 00:14:09,230 --> 00:14:11,570 Ja pyydämme 80 niistä. 281 00:14:11,570 --> 00:14:13,770 Haluamme olla tilaa pitää 80 nelinpelin. 282 00:14:13,770 --> 00:14:17,210 Joten 80 kertaa 8 on 640 tavua tietoa. 283 00:14:17,210 --> 00:14:21,880 Ja että kutsu fread on keräämällä 640 tavua tietoa 284 00:14:21,880 --> 00:14:27,770 tiedostosta osoitteen sivulle ptr ja varastoimalla se nyt arr2. 285 00:14:27,770 --> 00:14:32,770 >> Nyt voimme myös hoitaa fread aivan kuten puhelun fgetc. 286 00:14:32,770 --> 00:14:37,140 Tässä tapauksessa, me vain yrittää saat yhden merkin tiedostosta. 287 00:14:37,140 --> 00:14:40,070 Ja meidän ei tarvitse array pitää merkin. 288 00:14:40,070 --> 00:14:43,170 Voimme vain tallentaa sen merkki muuttuja. 289 00:14:43,170 --> 00:14:46,390 >> Saalis on kuitenkin se, että kun meillä vain on muuttuva, 290 00:14:46,390 --> 00:14:50,290 meidän täytyy kulkea osoite muuttujan 291 00:14:50,290 --> 00:14:52,550 koska muistaa, että ensimmäinen argumentti fread 292 00:14:52,550 --> 00:14:59,210 on kohdistin ja muisti jossa haluamme tallentaa tiedot. 293 00:14:59,210 --> 00:15:01,550 Jälleen nimi array on osoitin. 294 00:15:01,550 --> 00:15:04,200 Joten meidän ei tarvitse tehdä ampersand array. 295 00:15:04,200 --> 00:15:07,270 Mutta C-merkki C täällä, ei ole array. 296 00:15:07,270 --> 00:15:08,390 Se on vain muuttuja. 297 00:15:08,390 --> 00:15:11,840 Ja niin meidän täytyy kulkea Ampersand C osoittamaan 298 00:15:11,840 --> 00:15:15,350 että se on osoite, johon haluamme tallentaa tämän yhden tavun tietoja, 299 00:15:15,350 --> 00:15:20,479 tämä yksi merkki, joka olemme kerätä päässä PTR. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- Käyn läpi tämä hieman enemmän 301 00:15:22,270 --> 00:15:25,440 quickly-- on melko paljon tarkka vastaa fread 302 00:15:25,440 --> 00:15:27,720 paitsi se on kirjoitus- lukemisen sijaan, vain 303 00:15:27,720 --> 00:15:31,610 kuten other-- meillä on ollut auki ja lähellä, saada merkin, 304 00:15:31,610 --> 00:15:32,530 kirjoittaa merkin. 305 00:15:32,530 --> 00:15:35,040 Nyt on saada mielivaltainen määrä tietoa, 306 00:15:35,040 --> 00:15:37,170 oikea mielivaltainen määrä tietoa. 307 00:15:37,170 --> 00:15:39,790 Joten aivan kuten ennen, voimme on joukko 10 kokonaislukuja 308 00:15:39,790 --> 00:15:43,210 jossa meillä on jo tallennetut tiedot, ehkä. 309 00:15:43,210 --> 00:15:46,580 >> Se oli todennäköisesti joitakin riviä koodia että pitäisi mennä näiden kahden 310 00:15:46,580 --> 00:15:49,990 jossa olen täyttää sov kanssa jotain merkityksellistä. 311 00:15:49,990 --> 00:15:51,880 Olen täytä se 10 eri kokonaislukuja. 312 00:15:51,880 --> 00:15:54,920 Ja sen sijaan, mitä olen tekemässä kirjallisesti sov 313 00:15:54,920 --> 00:15:58,600 ja keräämällä tietoja sov. 314 00:15:58,600 --> 00:16:02,390 Ja otan että tiedot ja laittoi pallon tyhjään tiedostoon. 315 00:16:02,390 --> 00:16:05,410 >> Joten sen sijaan, että on peräisin tiedosto puskuriin, 316 00:16:05,410 --> 00:16:08,790 olemme nyt menee puskuri tiedostoon. 317 00:16:08,790 --> 00:16:10,580 Joten se on juuri päinvastaiset. 318 00:16:10,580 --> 00:16:16,680 Joten jälleen, kuten ennen, voimme myös kasaan kimpale muisti 319 00:16:16,680 --> 00:16:19,600 että olemme dynaamisesti jaetaan ja lukea, että 320 00:16:19,600 --> 00:16:21,570 ja kirjoittaa, että tiedosto. 321 00:16:21,570 --> 00:16:24,900 >> Ja meillä on myös yhden muuttujan pystyttävä pitämään yhden tavun 322 00:16:24,900 --> 00:16:27,200 koskevien tietojen, kuten merkin. 323 00:16:27,200 --> 00:16:29,830 Mutta jälleen kerran, meidän täytyy kulkea osoitteen muuttujan 324 00:16:29,830 --> 00:16:31,840 kun haluamme lukea siitä. 325 00:16:31,840 --> 00:16:35,280 Joten voimme kirjoittaa tiedot löydämme tähän osoitteeseen 326 00:16:35,280 --> 00:16:39,050 tiedoston osoitin PTR. 327 00:16:39,050 --> 00:16:41,630 >> On paljon muita Tiedoston I / O-toiminnot 328 00:16:41,630 --> 00:16:44,650 jotka tekevät eri asioita lisäksi niistä olemme puhuneet tänään. 329 00:16:44,650 --> 00:16:46,450 Pari niistä saatat löytää hyödyllistä 330 00:16:46,450 --> 00:16:50,840 ovat fgets ja fputs, jotka ovat yhtä 331 00:16:50,840 --> 00:16:56,190 sekä fgetc ja fputc mutta lukemiseen yksittäinen merkkijono tiedostosta. 332 00:16:56,190 --> 00:16:59,020 Sen sijaan yhden merkin, se lukee koko merkkijono. 333 00:16:59,020 --> 00:17:02,940 fprintf, joka pohjimmiltaan avulla voit käyttää printf kirjoittaa tiedostoon. 334 00:17:02,940 --> 00:17:05,619 Joten aivan kuten voit tehdä muuttuja korvaaminen käyttäen 335 00:17:05,619 --> 00:17:09,900 paikkamerkit prosenttia i ja prosenttia d, ja niin edelleen, printf 336 00:17:09,900 --> 00:17:14,690 voit samalla ottaa printf merkkijono ja tulostaa jotain 337 00:17:14,690 --> 00:17:16,800 kuin että tiedostoon. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- jos sinulla on DVD-soitin on analogisesti Käytän yleensä here-- 339 00:17:20,720 --> 00:17:23,109 on tavallaan kuin käytät pikakelaavat 340 00:17:23,109 --> 00:17:25,819 painikkeita liikkua elokuva. 341 00:17:25,819 --> 00:17:28,369 Samoin voit liikkua tiedosto. 342 00:17:28,369 --> 00:17:30,250 Yksi asioita sisällä että tiedosto rakenne 343 00:17:30,250 --> 00:17:34,270 että C luo sinulle on indikaattori missä olet tiedoston. 344 00:17:34,270 --> 00:17:36,420 Oletko aivan alkaa, tavun nolla? 345 00:17:36,420 --> 00:17:39,290 Oletteko tavu 100, tavu 1000, ja niin edelleen? 346 00:17:39,290 --> 00:17:44,340 Voit käyttää fseek mielivaltaisesti siirtää että indikaattori eteen- tai taaksepäin. 347 00:17:44,340 --> 00:17:46,744 >> Ja ftell, jälleen samanlainen DVD-soitin, 348 00:17:46,744 --> 00:17:49,660 on kuin pieni kello, joka kertoo kuinka monta minuuttia ja sekuntia sinua 349 00:17:49,660 --> 00:17:52,480 ovat osaksi tietyn elokuvan. 350 00:17:52,480 --> 00:17:56,990 Samoin ftell kertoo, kuinka monta tavua olet osaksi tiedoston. 351 00:17:56,990 --> 00:18:00,210 feof on erilainen versio havaita onko olet 352 00:18:00,210 --> 00:18:01,700 lopussa tiedoston. 353 00:18:01,700 --> 00:18:03,600 Ja ferror on funktio että voit käyttää 354 00:18:03,600 --> 00:18:06,959 havaita onko jotain on mennyt pieleen Työskentely tiedosto. 355 00:18:06,959 --> 00:18:08,750 Tämäkin on vain esimakua. 356 00:18:08,750 --> 00:18:12,730 On vielä paljon enemmän tiedosto I / O- toiminnot standardin io.h. 357 00:18:12,730 --> 00:18:16,620 Mutta tämä luultavasti sinut aloitti työt tiedosto viitteitä. 358 00:18:16,620 --> 00:18:17,640 Olen Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 Tämä on CS50. 360 00:18:19,750 --> 00:18:21,669