1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> SPEAKER: Siiani on tõenäoline et enamik teie programmid 3 00:00:07,870 --> 00:00:10,170 on natuke üürike. 4 00:00:10,170 --> 00:00:13,310 Sa jooksed programmi nagu Mario või ahne. 5 00:00:13,310 --> 00:00:17,350 Ta teeb midagi, siis äkki küsib kasutaja mõned andmed, 6 00:00:17,350 --> 00:00:20,400 prindi mõned väljund ekraanile, aga siis, kui oma programmi üle, 7 00:00:20,400 --> 00:00:23,252 seal on tõesti mingit tõendit seal see oli kunagi joosta esimese koha. 8 00:00:23,252 --> 00:00:25,960 Ma mõtlen, kindel, siis oleks jäänud see oli avatud terminali aknas 9 00:00:25,960 --> 00:00:29,770 aga kui sa selget ekraani, seal on tõesti mingeid tõendeid, et see olemas. 10 00:00:29,770 --> 00:00:33,720 Meil ei ole mõeldud kõikvõimalike püsiv, mille puhul teave 11 00:00:33,720 --> 00:00:36,890 mis eksisteerib pärast meie Programm on peatatud, 12 00:00:36,890 --> 00:00:39,241 või me ei ole kuni selle punktini. 13 00:00:39,241 --> 00:00:41,490 Õnneks küll, c ei annavad meile võime 14 00:00:41,490 --> 00:00:44,220 seda teha, rakendades midagi, mida nimetatakse 15 00:00:44,220 --> 00:00:48,330 Faili struktuur, mis põhimõtteliselt tähistab faili kahekordistuks 16 00:00:48,330 --> 00:00:53,826 Klõpsake oma arvutisse, kui olete kasutatakse graafilise kasutajaliidese keskkond. 17 00:00:53,826 --> 00:00:55,700 Üldiselt, kui ta töötab C-ga, me oleme tegelikult 18 00:00:55,700 --> 00:00:59,965 hakatakse koostööd viiteid files-- faili stars-- 19 00:00:59,965 --> 00:01:02,090 va natuke kui me räägime paar 20 00:01:02,090 --> 00:01:04,560 funktsioone, mis töötada failiosutajaid. 21 00:01:04,560 --> 00:01:08,990 Sa ei pea olema tõesti kaevatud liiga sügavale mõista viiteid 22 00:01:08,990 --> 00:01:09,730 ise. 23 00:01:09,730 --> 00:01:12,870 Seal on vähe teeny natuke kus me räägime neist, 24 00:01:12,870 --> 00:01:18,090 kuid üldiselt failiosutajaid ja suunanäitajaks, kuid omavahel seotud, 25 00:01:18,090 --> 00:01:20,290 ei ole täpselt sama asi. 26 00:01:20,290 --> 00:01:22,440 >> Mida ma nüüd mõtlen, kui Ma ütlen püsiv andmed? 27 00:01:22,440 --> 00:01:23,650 Mis on püsiv andmed? 28 00:01:23,650 --> 00:01:25,232 Miks me hoolime sellest? 29 00:01:25,232 --> 00:01:27,190 Ütle, et näiteks näed programm 30 00:01:27,190 --> 00:01:29,850 või olete ümber kirjutada programm, mis on mängus, 31 00:01:29,850 --> 00:01:32,960 ja soovite jälgida Kõike kasutaja liigub 32 00:01:32,960 --> 00:01:36,620 nii et võibolla kui midagi läheb valesti, saate vaadata faili pärast mängu. 33 00:01:36,620 --> 00:01:39,970 See, mida me mõtleme, kui me rääkida püsiv andmeid. 34 00:01:39,970 --> 00:01:43,930 >> Selle käigus töötab teie programmi, faili on loodud. 35 00:01:43,930 --> 00:01:45,680 Ja kui teie programm on seiskunud, 36 00:01:45,680 --> 00:01:48,689 et fail on ikka veel olemas oma süsteem. 37 00:01:48,689 --> 00:01:50,230 Ja me saame vaadata ja uurida. 38 00:01:50,230 --> 00:01:53,670 Ja nii, et programm oleks seatud loonud mõned püsivad andmed, 39 00:01:53,670 --> 00:01:57,390 andmed ka pärast programmi on töö lõpetanud. 40 00:01:57,390 --> 00:02:02,320 >> Nüüd on kõik need funktsioonid, mis töötavad koos failide loomiseks ja manipuleerimiseks 41 00:02:02,320 --> 00:02:04,940 neil erinevatel viisidel elan standard io.h, 42 00:02:04,940 --> 00:02:08,210 mis on päisefailist Sa oled tõenäoliselt juba nael 43 00:02:08,210 --> 00:02:10,910 sealhulgas ülaosas päris palju kõik oma programmid 44 00:02:10,910 --> 00:02:14,130 kuna see sisaldab üks kõige kasulikke funktsioone meile, 45 00:02:14,130 --> 00:02:16,130 printf, mis lubab ka elab standard io.h. 46 00:02:16,130 --> 00:02:20,400 Nii et sa ei pea nael hulka täiendavaid faile ilmselt 47 00:02:20,400 --> 00:02:23,540 et töötada failiosutajaid. 48 00:02:23,540 --> 00:02:29,980 >> Nüüd iga faili viitaja funktsiooniga, või iga faili I / O, sisend väljund 49 00:02:29,980 --> 00:02:33,310 funktsioon, nõustub üks teguritest või sisendite 50 00:02:33,310 --> 00:02:35,822 faili pointer-- välja ühe, fopen, mille 51 00:02:35,822 --> 00:02:38,280 on see, mida te kasutate, et saada faili pointer esimese koha. 52 00:02:38,280 --> 00:02:41,010 Aga kui olete avanud faili ja sa saad failiosutajaid, 53 00:02:41,010 --> 00:02:43,510 saate edastada neid argumente erinevate funktsioonide 54 00:02:43,510 --> 00:02:46,720 me ei kavatse rääkida Täna, samuti paljud teised 55 00:02:46,720 --> 00:02:48,520 nii et saate töötada faile. 56 00:02:48,520 --> 00:02:50,980 >> Nii on kuus päris ühiste põhi- ones 57 00:02:50,980 --> 00:02:52,870 et me ei kavatse rääkida täna. 58 00:02:52,870 --> 00:02:57,160 fopen ja tema kaaslane funktsiooni kirjutamisel, fgetc 59 00:02:57,160 --> 00:03:02,670 ja tema kaaslane funktsiooni fputc, ja fread ja tema kaaslane funktsiooni, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Nii lähme otse ta. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- mida see teeb? 63 00:03:07,050 --> 00:03:10,050 Noh, see avab faili ja see annab teile faili viitaja seda, 64 00:03:10,050 --> 00:03:14,000 nii et saad siis kasutada, et file pointer argumendina 65 00:03:14,000 --> 00:03:16,730 ükskõik millise muu faili I / O funktsioone. 66 00:03:16,730 --> 00:03:19,100 Kõige tähtsam meeles pidada koos fopen 67 00:03:19,100 --> 00:03:24,222 on, et kui olete avanud esitada või teha kõne nagu üks siin, 68 00:03:24,222 --> 00:03:26,930 sa pead veenduge, et kursorit, et sul tagasi 69 00:03:26,930 --> 00:03:28,320 ei ole võrdne null. 70 00:03:28,320 --> 00:03:31,320 Kui te ei ole vaatasin videot viiteid, et see ei pruugi mõtet. 71 00:03:31,320 --> 00:03:35,639 Aga kui sa püüad ja apparent nullviida meenutada, 72 00:03:35,639 --> 00:03:38,180 oma programmi ilmselt kannatada laevastikuosi [kuuldamatu]. 73 00:03:38,180 --> 00:03:40,540 Me tahame veenduda, et me sain õigustatud pointer tagasi. 74 00:03:40,540 --> 00:03:43,665 Valdav enamus ajast me saanud õigustatud pointer tagasi 75 00:03:43,665 --> 00:03:45,280 ja see ei ole probleem. 76 00:03:45,280 --> 00:03:46,760 >> Niisiis, kuidas me helistada fopen? 77 00:03:46,760 --> 00:03:48,051 Tundub üsna sarnane sellele. 78 00:03:48,051 --> 00:03:52,690 Faili star ptr-- PTR on üldine failinimi pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 ja me sündis kaks asja, failinime ja operatsiooni tahame teha. 80 00:03:57,300 --> 00:04:01,690 Nii et me oleks võinud kõne, mis näeb välja nagu see-- faili star PTR 1 võrdub fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 Ja operatsiooni olen valinud on r. 83 00:04:07,020 --> 00:04:08,639 >> Mis sa arvad, r on siin? 84 00:04:08,639 --> 00:04:11,180 Millised on asju, mida me võiksid teha faile? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Nii r on toiming, et me valida, kui me tahame, et lugeda faili. 87 00:04:17,500 --> 00:04:20,260 Nii et me oleks põhimõtteliselt kui me helistada niimoodi 88 00:04:20,260 --> 00:04:25,440 saada end faili viitaja nii et võiksime lugeda andmeid 89 00:04:25,440 --> 00:04:27,770 alates file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Samamoodi võiksime avada faili 2.txt kirjutamiseks ja nii saame edasi ptr2, 91 00:04:34,190 --> 00:04:38,210 faili viitaja lõin siin argumendina ühtegi funktsiooni, mis 92 00:04:38,210 --> 00:04:40,080 kirjutab andmed faili. 93 00:04:40,080 --> 00:04:43,767 Ja sarnane kirjalikult, seal on Samuti võimalus lisada, a. 94 00:04:43,767 --> 00:04:45,600 Erinevus kirjalikult ja kleebi 95 00:04:45,600 --> 00:04:50,920 on see, et kui sa kirjutad faili, kui sa helistada fopen kirjutamiseks 96 00:04:50,920 --> 00:04:54,761 ja mis fail on juba olemas, see on läheb üle kirjutada kogu toimikule. 97 00:04:54,761 --> 00:04:56,510 See saab alustada alguses, 98 00:04:56,510 --> 00:04:58,820 kustutab kõik andmed see on juba olemas. 99 00:04:58,820 --> 00:05:02,210 >> Arvestades, kui avate seda lisades, see läheb lõpuks faili 100 00:05:02,210 --> 00:05:04,340 kui seal on juba teksti või teavet selle, 101 00:05:04,340 --> 00:05:06,040 ja see on siis alustada kirjalikult sealt. 102 00:05:06,040 --> 00:05:08,570 Nii et sa ei kaota tahes teavet, mida olete teinud. 103 00:05:08,570 --> 00:05:12,110 Kas soovite kirjutada või lisada omamoodi sõltub olukorrast. 104 00:05:12,110 --> 00:05:16,840 Aga sa ilmselt tead, mida õigus tehing on, kui saabub aeg. 105 00:05:16,840 --> 00:05:18,020 Nii et fopen. 106 00:05:18,020 --> 00:05:18,930 >> Aga kirjutamisel? 107 00:05:18,930 --> 00:05:21,600 Noh, päris lihtsalt, kirjutamisel lihtsalt võtab faili viitaja. 108 00:05:21,600 --> 00:05:24,000 Ja kui te võite arvata, sulgub et fail. 109 00:05:24,000 --> 00:05:29,270 Ja kui me oleme suletud faili, me ei saa täita enam faili I / O funktsioone, 110 00:05:29,270 --> 00:05:31,420 lugemise või kirjutamise, toimiku kohta. 111 00:05:31,420 --> 00:05:36,444 Meil on uuesti avada esitada muul ajal, et 112 00:05:36,444 --> 00:05:38,610 jätkata koostööd see kasutades I / O funktsioone. 113 00:05:38,610 --> 00:05:41,520 Nii kirjutamisel tähendab, et me teinud töötavad selle faili. 114 00:05:41,520 --> 00:05:44,690 Ja kõik peame läbima on nimi faili viitaja. 115 00:05:44,690 --> 00:05:50,010 Nii et paar libiseb tagasi, me fopened faili 1 dot teksti lugemine 116 00:05:50,010 --> 00:05:52,854 ja me määrata, et file pointer ptr1. 117 00:05:52,854 --> 00:05:55,020 Nüüd oleme otsustanud me oleme teinud lugemine, et fail. 118 00:05:55,020 --> 00:05:56,561 Meil ei ole vaja teha enam sellega. 119 00:05:56,561 --> 00:05:58,890 Me ei saa lihtsalt kirjutamisel ptr1. 120 00:05:58,890 --> 00:06:01,950 Ja samamoodi võiksime kirjutamisel teisi ones. 121 00:06:01,950 --> 00:06:02,450 Hästi. 122 00:06:02,450 --> 00:06:03,700 Nii et on avamise ja sulgemise. 123 00:06:03,700 --> 00:06:05,780 Need on kaks peamist käivitada. 124 00:06:05,780 --> 00:06:08,050 >> Nüüd tahame tegelikult teha mõned huvitavad asjad, 125 00:06:08,050 --> 00:06:11,940 ja esimene funktsioon, mida me tulen näha, et teen seda on fgetc-- 126 00:06:11,940 --> 00:06:14,110 Fail Hangi iseloomu. 127 00:06:14,110 --> 00:06:17,350 Seda fgetc üldiselt oleks tõlkida. 128 00:06:17,350 --> 00:06:20,190 Selle eesmärk elus on loe järgmine sümbol, 129 00:06:20,190 --> 00:06:22,079 või kui see on teie väga Esimene kõne fgetc 130 00:06:22,079 --> 00:06:23,870 Konkreetse faili esimene märk. 131 00:06:23,870 --> 00:06:26,210 Aga siis pärast seda, saad järgmise, 132 00:06:26,210 --> 00:06:31,500 juba järgmisel iseloomu, et fail, ja salvestab selle märk muutuja. 133 00:06:31,500 --> 00:06:34,490 Kuna me oleme siin teinud, char ch võrdub fgetc, 134 00:06:34,490 --> 00:06:36,389 pass nime faili viitaja. 135 00:06:36,389 --> 00:06:38,180 Jällegi, see on väga siin oluline meeles pidada 136 00:06:38,180 --> 00:06:41,430 et selleks, et olla see operatsioon õnnestub, 137 00:06:41,430 --> 00:06:45,690 faili viitaja ise vist avati lugemiseks. 138 00:06:45,690 --> 00:06:50,589 Me ei saa lugeda tegelasele faili pointer, et avasime kirjutamiseks. 139 00:06:50,589 --> 00:06:52,630 Nii et üks piiranguid fopen, eks? 140 00:06:52,630 --> 00:06:55,470 Meil on piirata ise ainult täitmisel 141 00:06:55,470 --> 00:06:57,710 üks operatsioon ühe faili viitaja. 142 00:06:57,710 --> 00:07:00,220 Kui me tahame, et lugeda ja kirjutada samast failist, 143 00:07:00,220 --> 00:07:03,840 meil oleks avatud kaks eraldiseisvat failiosutajaid sama file-- 144 00:07:03,840 --> 00:07:05,670 üks lugemine, üks kirjutamiseks. 145 00:07:05,670 --> 00:07:08,400 >> Nii jälle, ainus põhjus Ma toon, et nüüd on 146 00:07:08,400 --> 00:07:11,920 sest kui me ei kavatse helistada to fgetc, et faili viitaja vist 147 00:07:11,920 --> 00:07:14,172 avati lugemiseks. 148 00:07:14,172 --> 00:07:15,880 Ja siis päris lihtsalt, kõik me peame tegema 149 00:07:15,880 --> 00:07:17,546 on läbida nime faili viitaja. 150 00:07:17,546 --> 00:07:21,060 Nii char ch võrdub fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> See läheb meid Järgmise character-- 152 00:07:23,200 --> 00:07:25,575 või jällegi, kui see on esimene aega oleme teinud seda üleskutset, 153 00:07:25,575 --> 00:07:29,750 Esimeses character-- iganes fail, millele viitab ptr1. 154 00:07:29,750 --> 00:07:32,210 Tuletame meelde, et see oli faili 1 dot teksti. 155 00:07:32,210 --> 00:07:36,490 Seda saad saada esimene märk, et ja me seda säilitada muutuja ch. 156 00:07:36,490 --> 00:07:37,941 Päris lihtne. 157 00:07:37,941 --> 00:07:40,190 Nii et me oleme vaadelnud vaid kolm funktsioonid ja juba me 158 00:07:40,190 --> 00:07:43,070 saab midagi päris kena. 159 00:07:43,070 --> 00:07:46,320 >> Nii et kui me võtame selle võime saada iseloomu 160 00:07:46,320 --> 00:07:48,943 ja me loop see-- nii me jätkuvalt saada tähemärki 161 00:07:48,943 --> 00:07:51,390 failist üle ja üle ja over-- nüüd 162 00:07:51,390 --> 00:07:54,500 saab lugeda iga iseloomu faili. 163 00:07:54,500 --> 00:07:58,670 Ja kui me printida iga tegelane kohe pärast loeme seda, 164 00:07:58,670 --> 00:08:01,960 oleme nüüd lugeda failist ja trükitud sisu ekraanile. 165 00:08:01,960 --> 00:08:05,610 Me oleme tegelikult konkateneeriti et faili ekraanil. 166 00:08:05,610 --> 00:08:09,670 Ja see on, mida Linux käsk kass teeb. 167 00:08:09,670 --> 00:08:13,250 >> Kui kirjutad kass faili nimi, ta trükib välja kogu sisu 168 00:08:13,250 --> 00:08:15,160 faili oma terminali aknas. 169 00:08:15,160 --> 00:08:19,010 Ja nii see väike loop siin ainult kolm rida koodi, 170 00:08:19,010 --> 00:08:23,270 kuid tegelikult dubleerib Linuxi käsk kass. 171 00:08:23,270 --> 00:08:25,210 Nii et see süntaks võiks vaadata veidi imelik, 172 00:08:25,210 --> 00:08:26,670 kuid siin on, mis siin toimub. 173 00:08:26,670 --> 00:08:31,460 Kuigi ch võrdub fgetc, PTR ei ole võrdne EOF-- see on kogu suutäie 174 00:08:31,460 --> 00:08:34,669 kuid olgem jaotada see lihtsalt nii et see on selge süntaks. 175 00:08:34,669 --> 00:08:37,169 Olen konsolideeritud see huvides ruumi, 176 00:08:37,169 --> 00:08:39,049 kuigi see on natuke süntaktiliselt keeruline. 177 00:08:39,049 --> 00:08:41,194 >> Nii et see osa roheline õigus nüüd, mida ta teeb? 178 00:08:41,194 --> 00:08:42,860 Noh, see on lihtsalt meie fgetc kõne, eks? 179 00:08:42,860 --> 00:08:44,530 Me oleme näinud, et enne. 180 00:08:44,530 --> 00:08:49,500 See soetatakse tegelasele faili. 181 00:08:49,500 --> 00:08:53,220 Siis me võrdleme et märgi vastu EOF. 182 00:08:53,220 --> 00:08:57,470 EOF on eriline väärtus, mis on määratletud standard io.h, mis 183 00:08:57,470 --> 00:08:59,390 on faili lõppu iseloomu. 184 00:08:59,390 --> 00:09:03,450 Ühesõnaga, mida juhtub See loop loeb iseloom, 185 00:09:03,450 --> 00:09:07,445 võrrelda seda EOF on faili lõppu iseloomu. 186 00:09:07,445 --> 00:09:10,070 Kui nad ei sobi, et me ei ole jõudnud faili lõppu, 187 00:09:10,070 --> 00:09:11,490 me printida, et iseloomu välja. 188 00:09:11,490 --> 00:09:13,740 Siis lähme tagasi alguses loop uuesti. 189 00:09:13,740 --> 00:09:18,310 Võtame tegelane, vaadake vastu EOF, välja trükkida ja nii edasi 190 00:09:18,310 --> 00:09:21,094 ja nii edasi ja nii edasi, silmukoiminen läbi niimoodi 191 00:09:21,094 --> 00:09:22,760 kuni oleme jõudnud faili lõppu. 192 00:09:22,760 --> 00:09:24,593 Ja siis selles punktis, me oleme trükitud 193 00:09:24,593 --> 00:09:26,210 välja kogu faili sisu. 194 00:09:26,210 --> 00:09:29,450 Nii jälle, me oleme näinud ainult fopen, kirjutamisel ja fgetc 195 00:09:29,450 --> 00:09:34,950 ja juba me ei dubleeri Linuxi terminali käsk. 196 00:09:34,950 --> 00:09:38,850 >> Nagu ma ütlesin alguses, meil oli fgetc ja fputc, 197 00:09:38,850 --> 00:09:41,860 ja fputc oli kaaslane funktsioon fgetc. 198 00:09:41,860 --> 00:09:44,880 Ja nii, nagu te võite ette kujutada, see on kirjalikult samaväärne. 199 00:09:44,880 --> 00:09:49,440 See võimaldab meil kirjutada üks märk faili. 200 00:09:49,440 --> 00:09:53,290 >> Jällegi hoiatus on lihtsalt nagu see oli fgetc faili 201 00:09:53,290 --> 00:09:56,660 et me kirjutame vist olnud avatud kirjalikult või lisades. 202 00:09:56,660 --> 00:10:00,820 Kui me püüame kasutada fputc failil et oleme avatud lugemise 203 00:10:00,820 --> 00:10:02,760 me ei kavatse kannatada natuke viga. 204 00:10:02,760 --> 00:10:04,440 Aga kõne on üsna lihtne. 205 00:10:04,440 --> 00:10:08,000 fputc Kapitali vorm ptr2 kõik mis tegema hakkab on see 206 00:10:08,000 --> 00:10:12,040 kavatsete kirjutada kiri A- arvesse faili 2 dot 207 00:10:12,040 --> 00:10:14,760 tekst, mis oli nime esitada, et avasime ja määratud 208 00:10:14,760 --> 00:10:17,280 kursor ptr2. 209 00:10:17,280 --> 00:10:20,430 Nii et me kirjutame Kapitali vorm esitada 2 dot teksti. 210 00:10:20,430 --> 00:10:24,592 Ja me kirjutada hüüatus juhtida esitada 3 dot 211 00:10:24,592 --> 00:10:27,330 teksti, mis osutas poolt ptr3. 212 00:10:27,330 --> 00:10:29,730 Nii jälle üsna lihtne siin. 213 00:10:29,730 --> 00:10:32,727 >> Aga nüüd me saame teha teine ​​asi. 214 00:10:32,727 --> 00:10:34,560 Meil on see näiteks olime lihtsalt läheb üle 215 00:10:34,560 --> 00:10:38,950 kas nad suudavad imiteerida kass Linux käsk, mis prindib välja 216 00:10:38,950 --> 00:10:40,500 ekraani. 217 00:10:40,500 --> 00:10:43,510 Noh, nüüd on meil võimalus loe tähemärki faile 218 00:10:43,510 --> 00:10:46,590 ja kirjutada märki faile, miks me lihtsalt ei asenda, et 219 00:10:46,590 --> 00:10:50,720 helistage printf koos kõne fputc. 220 00:10:50,720 --> 00:10:54,090 >> Ja nüüd me oleme dubleeritud cp, väga lihtne Linux käsk 221 00:10:54,090 --> 00:10:59,100 et me rääkisime, kuidas pikk tagasi Linuxi käsud video. 222 00:10:59,100 --> 00:11:01,070 Me oleme tegelikult dubleeritud, et siinsamas. 223 00:11:01,070 --> 00:11:04,790 Me loed iseloomu ja siis me oleme kirjalikult, et tegelane teise faili. 224 00:11:04,790 --> 00:11:07,660 Lugemine üks fail, kirjalikult teise, ikka ja jälle 225 00:11:07,660 --> 00:11:11,350 ja jälle, kuni me tabanud EOF. 226 00:11:11,350 --> 00:11:14,250 Me peame lõpuks esitada me üritame kopeerida. 227 00:11:14,250 --> 00:11:18,500 Ja et me kirjutanud kõik tegelaste peame faili 228 00:11:18,500 --> 00:11:19,500 et me kirjutame. 229 00:11:19,500 --> 00:11:24,270 Nii et see on cp, Linux koopia käsk. 230 00:11:24,270 --> 00:11:26,550 >> Alguses on see video oli mul hoiatus 231 00:11:26,550 --> 00:11:29,840 et meil oleks rääkida natuke vihjeid. 232 00:11:29,840 --> 00:11:32,480 Siin on spetsiaalselt kus me oleme räägime viiteid 233 00:11:32,480 --> 00:11:34,800 Lisaks failiosutajaid. 234 00:11:34,800 --> 00:11:37,870 Nii et see ülesanne tundub selline jube. 235 00:11:37,870 --> 00:11:39,120 See sai mitmeid parameetreid. 236 00:11:39,120 --> 00:11:40,430 Seal on palju siin toimub. 237 00:11:40,430 --> 00:11:42,760 Seal on palju erinevaid värvid ja tekste. 238 00:11:42,760 --> 00:11:47,100 Aga tõesti, see on lihtsalt generic versioon fgetc 239 00:11:47,100 --> 00:11:50,110 mis võimaldab meil saada mingeid informatsiooni hulk. 240 00:11:50,110 --> 00:11:53,560 See võib olla veidi ebaefektiivne, kui me oleme saada tegelased ükshaaval, 241 00:11:53,560 --> 00:11:55,770 iterating läbi faili üks täht korraga. 242 00:11:55,770 --> 00:12:00,230 Kas poleks ilusam saada 100 korraga või 500 korraga? 243 00:12:00,230 --> 00:12:03,250 >> Noh, fread ja tema kaaslane funktsiooni fwrite, mis me räägime 244 00:12:03,250 --> 00:12:05,490 teises, võimaldab meil teha just seda. 245 00:12:05,490 --> 00:12:08,480 Me võime lugeda suvalise summa Teabe failist 246 00:12:08,480 --> 00:12:10,290 ja me salvestada see kuskil ajutiselt. 247 00:12:10,290 --> 00:12:12,980 Selle asemel, et oleks võimalik lihtsalt sobitada see ühe muutuja, 248 00:12:12,980 --> 00:12:15,790 võiks olla vaja seda säilitada massiivi. 249 00:12:15,790 --> 00:12:19,980 Ja nii me edasi nelja argumente fread-- osuti 250 00:12:19,980 --> 00:12:23,940 kohta, kus me oleme läheb, et säilitada teavet, 251 00:12:23,940 --> 00:12:29,180 kui suured infoüksus on mitu ühikut teavet 252 00:12:29,180 --> 00:12:35,192 tahame omandada, ja mis faili tahame jõuda. 253 00:12:35,192 --> 00:12:37,150 Tõenäoliselt kõige ilmekamalt koos näiteks siin. 254 00:12:37,150 --> 00:12:41,640 Ütleme, et me kuulutame massiivi 10 täisarvud. 255 00:12:41,640 --> 00:12:45,080 Me oleme lihtsalt deklareeritud Kestab meelevaldselt int arr 10. 256 00:12:45,080 --> 00:12:46,970 Nii et on üsna lihtne. 257 00:12:46,970 --> 00:12:51,970 Nüüd, mida me teeme, kuigi on frecall on meil loed suurus int 258 00:12:51,970 --> 00:12:54,180 korda 10 baiti andmeid. 259 00:12:54,180 --> 00:12:59,040 Suurus int olend four-- see on suurus täisarv c. 260 00:12:59,040 --> 00:13:02,790 >> Mida me teeme on meil loed 40 baiti väärt info 261 00:13:02,790 --> 00:13:05,850 failist poolt esile tõstetud PTR. 262 00:13:05,850 --> 00:13:08,600 Ja me ladustamiseks neid 40 baiti kusagil 263 00:13:08,600 --> 00:13:12,080 kus me oleme kõrvale 40 baiti väärt mälu. 264 00:13:12,080 --> 00:13:15,970 Õnneks oleme juba teinud, et kuulutatakse arr, et massiivi seal. 265 00:13:15,970 --> 00:13:19,770 See mahub 10 neljabaidisel ühikut. 266 00:13:19,770 --> 00:13:22,860 Nii kokku, siis mahub 40 baiti väärt informatsiooni. 267 00:13:22,860 --> 00:13:26,540 Ja nüüd lugedes 40 baiti teabe faili, 268 00:13:26,540 --> 00:13:30,330 ja me talletades seda arr. 269 00:13:30,330 --> 00:13:35,470 >> Tagasikutsumise video viiteid, et nimi massiivi, nagu arr, 270 00:13:35,470 --> 00:13:38,370 on tõesti ainult pointer tema esimene element. 271 00:13:38,370 --> 00:13:43,680 Nii et kui me sündis arr seal, on tegelikult kulgeb osuti. 272 00:13:43,680 --> 00:13:46,120 >> Samamoodi saame teha see-- Me ei pruugi 273 00:13:46,120 --> 00:13:51,200 vaja päästa meie puhver stack. 274 00:13:51,200 --> 00:13:54,990 Võiksime ka dünaamiliselt eraldada puhver niimoodi, kasutades malloc. 275 00:13:54,990 --> 00:13:57,340 Pea meeles, kui me dünaamiliselt eraldada mälu, 276 00:13:57,340 --> 00:14:00,550 me salvestamist kohta hunnik, mitte virna. 277 00:14:00,550 --> 00:14:02,110 Aga see on ikka puhvri. 278 00:14:02,110 --> 00:14:06,810 >> See ikka, sel juhul on hoiab 640 baiti andmeid 279 00:14:06,810 --> 00:14:09,230 sest topelt kulub kaheksa baiti. 280 00:14:09,230 --> 00:14:11,570 Ja me paludes 80 neist. 281 00:14:11,570 --> 00:14:13,770 Me tahame ruumi hoida 80 kahekohalist tuba. 282 00:14:13,770 --> 00:14:17,210 Nii 80 korda 8 640 baiti andmeid. 283 00:14:17,210 --> 00:14:21,880 Ja et kõne fread on koguda 640 baiti andmeid 284 00:14:21,880 --> 00:14:27,770 failist poolt esile tõstetud PTR ja säilitamist nüüd arr2. 285 00:14:27,770 --> 00:14:32,770 >> Nüüd saame ka ravida fread nagu kõne fgetc. 286 00:14:32,770 --> 00:14:37,140 Sel juhul me lihtsalt üritan saada üks märk failist. 287 00:14:37,140 --> 00:14:40,070 Ja me ei pea massiivi korraldada iseloomu. 288 00:14:40,070 --> 00:14:43,170 Me saame vaid seda säilitada märk muutuja. 289 00:14:43,170 --> 00:14:46,390 >> Saak on aga, et kui me lihtsalt olla erinev, 290 00:14:46,390 --> 00:14:50,290 peame pass aadress, et muutuja 291 00:14:50,290 --> 00:14:52,550 sest meenutavad, et Esimene argument, et fread 292 00:14:52,550 --> 00:14:59,210 on viit asukoha ja mälu kus me tahame säilitada teavet. 293 00:14:59,210 --> 00:15:01,550 Jällegi nimele massiiv on osuti. 294 00:15:01,550 --> 00:15:04,200 Nii et me ei pea tegema ampersand massiivi. 295 00:15:04,200 --> 00:15:07,270 Aga c, iseloomu c Siin ei ole valikut. 296 00:15:07,270 --> 00:15:08,390 See on lihtsalt erinevad. 297 00:15:08,390 --> 00:15:11,840 Ja nii on meil vaja läbida ampersand c näidata 298 00:15:11,840 --> 00:15:15,350 et see on aadress, kuhu me tahame salvestada selle ühe baidi info 299 00:15:15,350 --> 00:15:20,479 see üks märk, et me koguda alates PTR. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- ma lähen läbi Selle veidi rohkem 301 00:15:22,270 --> 00:15:25,440 quickly-- on päris palju täpse vaste fread 302 00:15:25,440 --> 00:15:27,720 välja arvatud see kirjutamiseks lugemise asemel, lihtsalt 303 00:15:27,720 --> 00:15:31,610 nagu other-- oleme olnud avatud ja tihe, saad iseloomu, 304 00:15:31,610 --> 00:15:32,530 kirjutada iseloomu. 305 00:15:32,530 --> 00:15:35,040 Nüüd on saada suvalise informatsiooni hulk, 306 00:15:35,040 --> 00:15:37,170 õigus suvaline hulk teavet. 307 00:15:37,170 --> 00:15:39,790 Nii nagu enne, saame on massiivi 10 täisarvud 308 00:15:39,790 --> 00:15:43,210 kus meil on juba salvestatud teave, võib-olla. 309 00:15:43,210 --> 00:15:46,580 >> See oli ilmselt mõned read koodi et peaks minema nende kahe 310 00:15:46,580 --> 00:15:49,990 kus ma täita Arr koos midagi olulist. 311 00:15:49,990 --> 00:15:51,880 Täidan 10 erineva täisarvu. 312 00:15:51,880 --> 00:15:54,920 Ja selle asemel, mida ma olen tehes on kirjutamise arr 313 00:15:54,920 --> 00:15:58,600 ja andmete kogumisel arr. 314 00:15:58,600 --> 00:16:02,390 Ja ma võtan seda teavet ja selle kasutuselevõtul faili. 315 00:16:02,390 --> 00:16:05,410 >> Nii et selle asemel, et oleks alates faili puhver, 316 00:16:05,410 --> 00:16:08,790 me nüüd läheb puhver faili. 317 00:16:08,790 --> 00:16:10,580 Nii et see on just vastupidi. 318 00:16:10,580 --> 00:16:16,680 Nii jälle, nagu enne, saame Samuti on hunnik patakas mälu 319 00:16:16,680 --> 00:16:19,600 et me oleme dünaamiliselt eraldatud ja lugeda, et 320 00:16:19,600 --> 00:16:21,570 ja kirjutada, et faili. 321 00:16:21,570 --> 00:16:24,900 >> Ja meil on ka ühe muutuja mahub üks bait 322 00:16:24,900 --> 00:16:27,200 Teabe nagu iseloomu. 323 00:16:27,200 --> 00:16:29,830 Aga jälle, peame läbima aadressi selle muutuja 324 00:16:29,830 --> 00:16:31,840 Kui me tahame, et lugeda seda. 325 00:16:31,840 --> 00:16:35,280 Nii saame kirjutada teave leiame sellele aadressile 326 00:16:35,280 --> 00:16:39,050 faili pointer, PTR. 327 00:16:39,050 --> 00:16:41,630 >> Seal on palju muud suur fail I / O funktsioonid 328 00:16:41,630 --> 00:16:44,650 et teha erinevaid asju peale need, mida me rääkisime täna. 329 00:16:44,650 --> 00:16:46,450 Paar need mis võivad teile kasulik 330 00:16:46,450 --> 00:16:50,840 on fgets ja fputs, mis on samaväärne 331 00:16:50,840 --> 00:16:56,190 of fgetc ja fputc kuid lugemine ühe string failist. 332 00:16:56,190 --> 00:16:59,020 Selle asemel, et ühe märgi, siis loe kogu string. 333 00:16:59,020 --> 00:17:02,940 fprintf, mis põhimõtteliselt võimaldab Teil kasutada printf kirjutada faili. 334 00:17:02,940 --> 00:17:05,619 Nii nagu sa saad teha muutuja vahetusest kasutades 335 00:17:05,619 --> 00:17:09,900 kohatäited protsenti i ja protsenti d, ja nii edasi, kusjuures printf 336 00:17:09,900 --> 00:17:14,690 saab sarnaselt võtta printf string ja print midagi 337 00:17:14,690 --> 00:17:16,800 niimoodi faili. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- kui sul on DVD-mängija on analoogiline ma tavaliselt kasutada siin-- 339 00:17:20,720 --> 00:17:23,109 on omamoodi nagu kasutades oma tagasikerimine ja kiiresti edasi 340 00:17:23,109 --> 00:17:25,819 nupud liikuda filmi. 341 00:17:25,819 --> 00:17:28,369 Samamoodi saab liikuda faili. 342 00:17:28,369 --> 00:17:30,250 Üks asi sees et faili struktuur 343 00:17:30,250 --> 00:17:34,270 et c loob teile on näitaja kus sa oled faili. 344 00:17:34,270 --> 00:17:36,420 Kas sa oled päris algusega kell bait null? 345 00:17:36,420 --> 00:17:39,290 Oled baidi 100, bait 1000, ja nii edasi? 346 00:17:39,290 --> 00:17:44,340 Võite kasutada fseek suvaliselt liigutada et indikaator edasi või tagasi. 347 00:17:44,340 --> 00:17:46,744 >> Ja ftell taas sarnane DVD-mängija, 348 00:17:46,744 --> 00:17:49,660 on nagu väike kell, mis ütleb kui palju minuteid ja sekundeid sulle 349 00:17:49,660 --> 00:17:52,480 on arvesse konkreetse filmi. 350 00:17:52,480 --> 00:17:56,990 Samuti ftell ütleb teile, kuidas palju baite olete failis. 351 00:17:56,990 --> 00:18:00,210 feof on erinev versioon tuvastamiseks, kas olete 352 00:18:00,210 --> 00:18:01,700 jõudnud faili lõppu. 353 00:18:01,700 --> 00:18:03,600 Ja ferror on funktsioon mida saab kasutada 354 00:18:03,600 --> 00:18:06,959 tuvastada, kas midagi on valesti läinud töö failiga. 355 00:18:06,959 --> 00:18:08,750 Jällegi, see on lihtsalt kriimustamata. 356 00:18:08,750 --> 00:18:12,730 Seal on veel palju rohkem faili I / O funktsioonid standard io.h. 357 00:18:12,730 --> 00:18:16,620 Aga see on ilmselt sulle alustas tööd failiosutajaid. 358 00:18:16,620 --> 00:18:17,640 Ma olen Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 See on CS50. 360 00:18:19,750 --> 00:18:21,669