1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> SPEAKER: Do sada, to je vjerojatno da je većina vaših programa 3 00:00:07,870 --> 00:00:10,170 bili malo prolazno. 4 00:00:10,170 --> 00:00:13,310 Možete pokrenuti program kao što je Mario ili Pohlepni. 5 00:00:13,310 --> 00:00:17,350 To čini nešto, to možda traži korisnik za neke informacije, 6 00:00:17,350 --> 00:00:20,400 ispisati neki izlaz na zaslonu, ali onda kada je vaš program je gotov, 7 00:00:20,400 --> 00:00:23,252 da stvarno nema dokaza postoji je ikada pokrenuti na prvom mjestu. 8 00:00:23,252 --> 00:00:25,960 Mislim, sigurno, možda ste napustili je otvoriti u prozoru terminala, 9 00:00:25,960 --> 00:00:29,770 ali ako očistiti ekran, tu je stvarno nema dokaza da je postojao. 10 00:00:29,770 --> 00:00:33,720 Mi nemamo sredstva pohranjivanja uporni informacije, informacije 11 00:00:33,720 --> 00:00:36,890 koji postoji nakon našeg Program je zaustavljen radi, 12 00:00:36,890 --> 00:00:39,241 ili nemamo i do ove točke. 13 00:00:39,241 --> 00:00:41,490 Srećom ipak, c ne nam mogućnost 14 00:00:41,490 --> 00:00:44,220 to učiniti implementacijom nešto što se zove 15 00:00:44,220 --> 00:00:48,330 datoteka, struktura koja u osnovi predstavlja datoteku koju će udvostručiti 16 00:00:48,330 --> 00:00:53,826 kliknite na vašem računalu, ako ste koristi u grafičkom korisničkom okruženju. 17 00:00:53,826 --> 00:00:55,700 Općenito kada se radi sa c, mi smo zapravo 18 00:00:55,700 --> 00:00:59,965 će raditi s upućuje na files-- datoteku stars-- 19 00:00:59,965 --> 00:01:02,090 osim malo kada govorimo o par 20 00:01:02,090 --> 00:01:04,560 od funkcija koje rad s datotečnim upućuje. 21 00:01:04,560 --> 00:01:08,990 Ne morate da se stvarno iskopa previše duboko u razumijevanje pokazivače 22 00:01:08,990 --> 00:01:09,730 same. 23 00:01:09,730 --> 00:01:12,870 Tu je malo teeny malo gdje ćemo razgovarati o njima, 24 00:01:12,870 --> 00:01:18,090 ali općenito podnijeti upućuje i naputke, a međusobno povezane, 25 00:01:18,090 --> 00:01:20,290 nisu baš ista stvar. 26 00:01:20,290 --> 00:01:22,440 >> Sada što mislim kad Kažem trajne podatke? 27 00:01:22,440 --> 00:01:23,650 Što je postojana podatke? 28 00:01:23,650 --> 00:01:25,232 Zašto mi je stalo do njega? 29 00:01:25,232 --> 00:01:27,190 Recimo, na primjer, da radite program 30 00:01:27,190 --> 00:01:29,850 ili ste prepisivati program koji je igra, 31 00:01:29,850 --> 00:01:32,960 a želite pratiti svih korisnikovih poteza 32 00:01:32,960 --> 00:01:36,620 tako da možda, ako nešto pođe po zlu, možete pregledati datoteku nakon utakmice. 33 00:01:36,620 --> 00:01:39,970 To je ono što mislimo kad smo razgovarati o postojanim podataka. 34 00:01:39,970 --> 00:01:43,930 >> U tijeku izvodi svoj program je datoteka stvorena. 35 00:01:43,930 --> 00:01:45,680 A kada vaš program je zaustavljen radi, 36 00:01:45,680 --> 00:01:48,689 da i dalje postoji datoteka na vašem sustavu. 37 00:01:48,689 --> 00:01:50,230 I možemo gledati na to i ispitati. 38 00:01:50,230 --> 00:01:53,670 I tako da program bi se postaviti na stvorili su neke trajne podatke, 39 00:01:53,670 --> 00:01:57,390 postoje podaci nakon programa dovršetka. 40 00:01:57,390 --> 00:02:02,320 >> Sada sve ove funkcije koje rade sa stvaranjem datoteke i manipulaciju 41 00:02:02,320 --> 00:02:04,940 ih na razne načine živjeti u standardnom io.h, 42 00:02:04,940 --> 00:02:08,210 što je zaglavlje datoteke koja vjerojatno ste bili funta 43 00:02:08,210 --> 00:02:10,910 uključujući na vrhu prilično koliko sve programe 44 00:02:10,910 --> 00:02:14,130 zato što sadrži jedan od većina korisne funkcije za nas, 45 00:02:14,130 --> 00:02:16,130 printf, koji također omogućuje živi u standardnom io.h. 46 00:02:16,130 --> 00:02:20,400 Dakle, ne morate se uključiti funta bilo kakve dodatne datoteke vjerojatno 47 00:02:20,400 --> 00:02:23,540 kako raditi s datotečnim upućuje. 48 00:02:23,540 --> 00:02:29,980 >> Sada svaki funkcija datoteka pokazivač, ili svaki file I / O, ulaz izlaz 49 00:02:29,980 --> 00:02:33,310 funkcija, prihvaća kao jedan njegovih parametara ili ulaza 50 00:02:33,310 --> 00:02:35,822 pointer-- datoteka osim za jedan, fopen, koji 51 00:02:35,822 --> 00:02:38,280 je ono što koristite da biste dobili datoteku pokazivač na prvom mjestu. 52 00:02:38,280 --> 00:02:41,010 No, nakon što ste se otvorila datoteka i dobiti datoteka pokazivače, 53 00:02:41,010 --> 00:02:43,510 onda možete ih proći kao Argumenti na raznim funkcijama 54 00:02:43,510 --> 00:02:46,720 ćemo govoriti o Danas, kao i mnogi drugi 55 00:02:46,720 --> 00:02:48,520 tako da možete raditi s datotekama. 56 00:02:48,520 --> 00:02:50,980 >> Dakle, postoje šest lijepa zajedničke temeljne one 57 00:02:50,980 --> 00:02:52,870 da ćemo razgovarati o danas. 58 00:02:52,870 --> 00:02:57,160 fopen i njegov suputnik Funkcija fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 i njegov suputnik funkcija fputc, i fread i njegov suputnik funkcija, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Tako ćemo dobiti pravo na njega. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- što učiniti? 63 00:03:07,050 --> 00:03:10,050 Pa, to otvara datoteku i daje vam datoteke pokazivač na njega, 64 00:03:10,050 --> 00:03:14,000 tako da onda možete koristiti kako file pokazivač kao argument 65 00:03:14,000 --> 00:03:16,730 bilo druge datoteke I / O funkcije. 66 00:03:16,730 --> 00:03:19,100 Najvažnija stvar zapamtiti s fopen 67 00:03:19,100 --> 00:03:24,222 je da nakon što su otvorena podnijeti ili se poziv poput one ovdje, 68 00:03:24,222 --> 00:03:26,930 morate provjerite je li da pokazivač koji se vratio 69 00:03:26,930 --> 00:03:28,320 nije jednako nuli. 70 00:03:28,320 --> 00:03:31,320 Ako niste gledali video na pokazivače, to ne bi imalo smisla. 71 00:03:31,320 --> 00:03:35,639 Ali ako pokušaš i dereference null pointer podsjetimo, 72 00:03:35,639 --> 00:03:38,180 Vaš program će vjerojatno patiti segmentiranja [nečujan]. 73 00:03:38,180 --> 00:03:40,540 Želimo biti sigurni da smo dobio legitimnu pokazivač leđa. 74 00:03:40,540 --> 00:03:43,665 Velika većina vremena ćemo dobivši legitiman pokazivač natrag 75 00:03:43,665 --> 00:03:45,280 a to neće biti problem. 76 00:03:45,280 --> 00:03:46,760 >> Pa kako ćemo napraviti poziv na fopen? 77 00:03:46,760 --> 00:03:48,051 Izgleda prilično ovako. 78 00:03:48,051 --> 00:03:52,690 Datoteka zvijezda ptr-- PTR kao generički naziv datoteke pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 i prolazimo u dvije stvari, naziv datoteke i operacija želimo poduzeti. 80 00:03:57,300 --> 00:04:01,690 Tako smo mogli imati poziv koji izgleda kao this-- datoteka zvijezda PTR 1 jednak fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 I rad sam izabrao je r. 83 00:04:07,020 --> 00:04:08,639 >> Dakle, što misliš, je r ovdje? 84 00:04:08,639 --> 00:04:11,180 Koje su vrste stvari koje mogli učiniti da datoteke? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Dakle, r je operacija koja se odabrati kada želimo čitati datoteku. 87 00:04:17,500 --> 00:04:20,260 Dakle, mi bi u osnovi, kada smo uputili poziv kao što je ovaj 88 00:04:20,260 --> 00:04:25,440 biti uzimajući sebi datotečni pokazivač tako da smo tada mogli pročitati podatke 89 00:04:25,440 --> 00:04:27,770 iz file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Isto tako, mogli bismo otvoriti datoteku 2.txt za pisanje i tako možemo proći ptr2, 91 00:04:34,190 --> 00:04:38,210 file pokazivač sam stvorio ovdje, kao argument za bilo koje funkcije 92 00:04:38,210 --> 00:04:40,080 piše podatke u datoteku. 93 00:04:40,080 --> 00:04:43,767 A slična pisanja, tu je i mogućnost da se dodati, a. 94 00:04:43,767 --> 00:04:45,600 Razlika između pisanje i dodavanjem 95 00:04:45,600 --> 00:04:50,920 se da kada pišete u datoteku, ako upućivanje poziva fopen za pisanje 96 00:04:50,920 --> 00:04:54,761 i da datoteka već postoji, to je će prebrisati cijeli datoteku. 97 00:04:54,761 --> 00:04:56,510 To će za početak na samom početku, 98 00:04:56,510 --> 00:04:58,820 brisanje svih informacija to je već tamo. 99 00:04:58,820 --> 00:05:02,210 >> Dok ako ga otvoriti dodavanjem, to će ići na kraju datoteke 100 00:05:02,210 --> 00:05:04,340 ako je već tekst ona ili informacije u njemu, 101 00:05:04,340 --> 00:05:06,040 a onda će početi pisanje od tamo. 102 00:05:06,040 --> 00:05:08,570 Tako nećete izgubiti bilo koji od Informacije koje ste učinili prije. 103 00:05:08,570 --> 00:05:12,110 Bilo da želite pisati ili dodati vrsta ovisi o situaciji. 104 00:05:12,110 --> 00:05:16,840 Ali vjerojatno ćete znati što je Pravo rad je kada za to dođe vrijeme. 105 00:05:16,840 --> 00:05:18,020 Dakle, to je fopen. 106 00:05:18,020 --> 00:05:18,930 >> Što je fclose? 107 00:05:18,930 --> 00:05:21,600 Pa, prilično jednostavno, fclose Samo prihvaća datoteke pokazivač. 108 00:05:21,600 --> 00:05:24,000 I kao što ste mogli očekivati, zatvara tu datoteku. 109 00:05:24,000 --> 00:05:29,270 I nakon što smo zatvorili datoteku, ne možemo obavljati bilo više datoteka I / O funkcije, 110 00:05:29,270 --> 00:05:31,420 čitanje ili pisanje na tu datoteku. 111 00:05:31,420 --> 00:05:36,444 Moramo ponovno otvoriti podnijeti još vremena kako bi 112 00:05:36,444 --> 00:05:38,610 nastaviti rad s to pomoću I / O funkcije. 113 00:05:38,610 --> 00:05:41,520 Dakle fclose znači da smo učinili rad s ovom datotekom. 114 00:05:41,520 --> 00:05:44,690 I sve što je potrebno da prođe u je naziv datoteke pokazivača. 115 00:05:44,690 --> 00:05:50,010 Dakle, na par dana tobogan, mi fopened datoteka 1 točka tekst za čitanje 116 00:05:50,010 --> 00:05:52,854 a mi koji dodjeljuje file pokazivač ptr1. 117 00:05:52,854 --> 00:05:55,020 Sada smo odlučili smo učinjeno čitanje iz te datoteke. 118 00:05:55,020 --> 00:05:56,561 Ne moramo učiniti više s njom. 119 00:05:56,561 --> 00:05:58,890 Možemo samo fclose ptr1. 120 00:05:58,890 --> 00:06:01,950 A isto tako, mogli bismo fclose one druge. 121 00:06:01,950 --> 00:06:02,450 U redu. 122 00:06:02,450 --> 00:06:03,700 Tako da je otvaranje i zatvaranje. 123 00:06:03,700 --> 00:06:05,780 To su dva osnovna s početkom poslovanja. 124 00:06:05,780 --> 00:06:08,050 >> Sada želimo da se zapravo učiniti neke zanimljive stvari, 125 00:06:08,050 --> 00:06:11,940 i prva funkcija da ćemo vidim da će to učiniti je fgetc-- 126 00:06:11,940 --> 00:06:14,110 file dobiti karakter. 127 00:06:14,110 --> 00:06:17,350 To je ono što se općenito fgetc bi prevesti na. 128 00:06:17,350 --> 00:06:20,190 Njegov cilj u životu je pročitajte sljedeći znak, 129 00:06:20,190 --> 00:06:22,079 ili ako je to vaš vrlo Prvi poziv na fgetc 130 00:06:22,079 --> 00:06:23,870 za određenu datoteku, Prvi znak. 131 00:06:23,870 --> 00:06:26,210 Ali onda nakon toga, dobivate sljedeći, 132 00:06:26,210 --> 00:06:31,500 već sljedećeg karakter te datoteke, i pohranjuje ga u varijablu znakova. 133 00:06:31,500 --> 00:06:34,490 Kao što smo učinili ovdje, char ch jednak fgetc, 134 00:06:34,490 --> 00:06:36,389 prolaze u ime datoteke pokazivača. 135 00:06:36,389 --> 00:06:38,180 Opet, to je vrlo važno ovdje zapamtiti 136 00:06:38,180 --> 00:06:41,430 da bi se ima ova operacija uspije, 137 00:06:41,430 --> 00:06:45,690 file sama pokazivač Mora otvoren za čitanje. 138 00:06:45,690 --> 00:06:50,589 Ne možemo pročitati lik iz datoteke Pokazivač da smo otvorili za pisanje. 139 00:06:50,589 --> 00:06:52,630 Dakle, to je jedan od Ograničenja fopen, zar ne? 140 00:06:52,630 --> 00:06:55,470 Moramo ograničiti sami samo na obavljanje 141 00:06:55,470 --> 00:06:57,710 jedna operacija s jednim pokazivačem datoteke. 142 00:06:57,710 --> 00:07:00,220 Ako smo htjeli čitati i pisati iz iste datoteke, 143 00:07:00,220 --> 00:07:03,840 bismo imali otvorene dvije odvojene file upućuje na istom file-- 144 00:07:03,840 --> 00:07:05,670 jedan za čitanje, jedan za pisanje. 145 00:07:05,670 --> 00:07:08,400 >> Pa opet, jedini razlog Donosim da do sada 146 00:07:08,400 --> 00:07:11,920 jer ako ćemo napraviti poziv da fgetc, datoteka pokazivač Mora 147 00:07:11,920 --> 00:07:14,172 otvoren za čitanje. 148 00:07:14,172 --> 00:07:15,880 I onda lijepo jednostavno, sve što trebate učiniti 149 00:07:15,880 --> 00:07:17,546 je proći u ime datoteke pokazivača. 150 00:07:17,546 --> 00:07:21,060 Dakle char ch jednak fgetc ptr1. 151 00:07:21,060 --> 00:07:23,200 >> To će nam doći sljedeći character-- 152 00:07:23,200 --> 00:07:25,575 ili opet, ako je to prvi Vrijeme smo napravili ovaj poziv, 153 00:07:25,575 --> 00:07:29,750 prvi character-- bez obzira Datoteka je ukazao na koju ptr1. 154 00:07:29,750 --> 00:07:32,210 Sjetite se da je to datoteka 1 točka tekst. 155 00:07:32,210 --> 00:07:36,490 To će dobiti prvi znak da je a mi ćemo ga pohraniti u varijablu ch. 156 00:07:36,490 --> 00:07:37,941 Prilično jednostavan. 157 00:07:37,941 --> 00:07:40,190 Tako smo gledao samo na tri funkcije i već smo 158 00:07:40,190 --> 00:07:43,070 može učiniti nešto prilično uredan. 159 00:07:43,070 --> 00:07:46,320 >> Dakle, ako uzmemo tu sposobnost dobivanje znaka 160 00:07:46,320 --> 00:07:48,943 a mi petlje it-- pa smo nastaviti da biste dobili znakova 161 00:07:48,943 --> 00:07:51,390 iz datoteke tijekom i više i over-- sada smo 162 00:07:51,390 --> 00:07:54,500 može čitati svaki karakter datoteke. 163 00:07:54,500 --> 00:07:58,670 A ako ćemo ispisati svaki lik Odmah nakon što smo ga čitali, 164 00:07:58,670 --> 00:08:01,960 sada smo pročitali iz datoteke i tiskani njezin sadržaj na zaslonu. 165 00:08:01,960 --> 00:08:05,610 Mi smo spojeni učinkovito koji datoteka na zaslonu. 166 00:08:05,610 --> 00:08:09,670 I to je ono što je Linux naredbe mačka radi. 167 00:08:09,670 --> 00:08:13,250 >> Ako upišete mačka u nazivu datoteke ga, će ispisati cijeli sadržaj 168 00:08:13,250 --> 00:08:15,160 datoteke u prozoru terminala. 169 00:08:15,160 --> 00:08:19,010 I tako ovaj mali petlje ovdje samo tri linije koda, 170 00:08:19,010 --> 00:08:23,270 ali učinkovito duplicira Linux naredbe mačka. 171 00:08:23,270 --> 00:08:25,210 Dakle, ovo sintaksa moglo izgleda malo čudno, 172 00:08:25,210 --> 00:08:26,670 ali ovdje je ono što se događa ovdje. 173 00:08:26,670 --> 00:08:31,460 Dok ch jednak fgetc, PTR nije jednaka EOF-- to je sasvim mala količina, 174 00:08:31,460 --> 00:08:34,669 ali neka je to break down jednostavno tako da je jasno na sintaksi. 175 00:08:34,669 --> 00:08:37,169 Ja sam to konsolidirano zbog prostora, 176 00:08:37,169 --> 00:08:39,049 iako je malo sintaktički lukav. 177 00:08:39,049 --> 00:08:41,194 >> Dakle, ovo je dio u zelenoj prava Sada, što se to radi? 178 00:08:41,194 --> 00:08:42,860 Pa, to je samo naš fgetc poziv, zar ne? 179 00:08:42,860 --> 00:08:44,530 Vidjeli smo da je prije. 180 00:08:44,530 --> 00:08:49,500 To je dobivanje jednog lik iz datoteke. 181 00:08:49,500 --> 00:08:53,220 Onda smo usporediti karakter protiv EOF. 182 00:08:53,220 --> 00:08:57,470 EOF je posebna vrijednost koja je definirana u standardnom io.h, koji 183 00:08:57,470 --> 00:08:59,390 je kraj datoteke karaktera. 184 00:08:59,390 --> 00:09:03,450 Tako je u osnovi ono što će se dogoditi je ova petlja će pročitati lik, 185 00:09:03,450 --> 00:09:07,445 usporedite ga EOF je kraj datoteke karaktera. 186 00:09:07,445 --> 00:09:10,070 Ako oni ne odgovaraju, tako da nemamo do kraja datoteke, 187 00:09:10,070 --> 00:09:11,490 ćemo ispisati taj lik. 188 00:09:11,490 --> 00:09:13,740 Onda ćemo se vratiti na početak petlje opet. 189 00:09:13,740 --> 00:09:18,310 Mi ćemo dobiti znak, provjerite Protiv EOF, print it out, i tako dalje 190 00:09:18,310 --> 00:09:21,094 i tako dalje i tako dalje, petlje kroz na taj način 191 00:09:21,094 --> 00:09:22,760 dok smo došli do kraja datoteke. 192 00:09:22,760 --> 00:09:24,593 I onda po tom pitanju, ćemo ispisati 193 00:09:24,593 --> 00:09:26,210 kako cijeli sadržaj datoteke. 194 00:09:26,210 --> 00:09:29,450 Pa opet, mi samo smo vidjeli fopen, fclose i fgetc 195 00:09:29,450 --> 00:09:34,950 a već možemo ponoviti Linux terminala naredbe. 196 00:09:34,950 --> 00:09:38,850 >> Kao što sam rekao na početku, imali smo fgetc i fputc, 197 00:09:38,850 --> 00:09:41,860 i fputc je suputnik funkcija fgetc. 198 00:09:41,860 --> 00:09:44,880 I tako, kao što ste mogli zamisliti, to je pisanje ekvivalent. 199 00:09:44,880 --> 00:09:49,440 To nam omogućuje da napisati jedan znak u datoteku. 200 00:09:49,440 --> 00:09:53,290 >> Opet, caveat se, samo kao što je to bilo s fgetc, datoteka 201 00:09:53,290 --> 00:09:56,660 da smo pismeno morao biti otvorena za pisanje ili dodavanjem. 202 00:09:56,660 --> 00:10:00,820 Ako ćemo pokušati i koristiti fputc na datoteku da smo otvorili za čitanje, 203 00:10:00,820 --> 00:10:02,760 ćemo trpjeti malo pogreške. 204 00:10:02,760 --> 00:10:04,440 No, poziv je vrlo jednostavna. 205 00:10:04,440 --> 00:10:08,000 fputc prijestolnica ptr2, sve što će učiniti je da je 206 00:10:08,000 --> 00:10:12,040 će napisati pismo u u datoteku 2. točke 207 00:10:12,040 --> 00:10:14,760 tekst, što je naziv podnijeti da smo otvorili i dodjeljuje 208 00:10:14,760 --> 00:10:17,280 pokazivač ptr2. 209 00:10:17,280 --> 00:10:20,430 Tako ćemo napisati kapital od A do datoteka 2 dot tekst. 210 00:10:20,430 --> 00:10:24,592 A mi ćemo pisati uzvik ukazuju da podnese 3 točka 211 00:10:24,592 --> 00:10:27,330 Tekst, koji je istaknuo da se od ptr3. 212 00:10:27,330 --> 00:10:29,730 Pa opet, prilično jednostavan ovdje. 213 00:10:29,730 --> 00:10:32,727 >> No, sada možemo učiniti još jednu stvar. 214 00:10:32,727 --> 00:10:34,560 Imamo ovaj primjer samo smo išli preko 215 00:10:34,560 --> 00:10:38,950 o bitak u mogućnosti replicirati mačku Linux naredba, onaj koji ispisuje 216 00:10:38,950 --> 00:10:40,500 na zaslonu. 217 00:10:40,500 --> 00:10:43,510 Pa, sada kada imamo mogućnost čitati znakove iz datoteka 218 00:10:43,510 --> 00:10:46,590 i pisati znakove u datoteke, zašto ne bismo jednostavno zamijeniti da 219 00:10:46,590 --> 00:10:50,720 poziv na printf s pozivom na fputc. 220 00:10:50,720 --> 00:10:54,090 >> I sada smo umnožavati CP, vrlo osnovni Linux naredbe 221 00:10:54,090 --> 00:10:59,100 da smo razgovarali o tako dugo Prije u Linux naredbe video. 222 00:10:59,100 --> 00:11:01,070 Imamo učinkovito umnožavati da upravo ovdje. 223 00:11:01,070 --> 00:11:04,790 Mi čitanje karaktera, a zatim smo pisanje da je lik na drugu datoteku. 224 00:11:04,790 --> 00:11:07,660 Čitanje iz jedne datoteke, pisanje na drugu, više i više 225 00:11:07,660 --> 00:11:11,350 i iznova dok ne pogoditi EOF. 226 00:11:11,350 --> 00:11:14,250 Moramo do kraja od file mi pokušavamo kopirati s. 227 00:11:14,250 --> 00:11:18,500 I da ćemo napisali sve od likova moramo datoteke 228 00:11:18,500 --> 00:11:19,500 da mi pismeno. 229 00:11:19,500 --> 00:11:24,270 Dakle, to je cp, Linux primjerak naredbe. 230 00:11:24,270 --> 00:11:26,550 >> Na samom početku ovaj video sam imao upozorenje 231 00:11:26,550 --> 00:11:29,840 da ćemo pričati malo o pokazivače. 232 00:11:29,840 --> 00:11:32,480 Ovdje je posebno gdje smo će govoriti o pokazivače 233 00:11:32,480 --> 00:11:34,800 osim da podnese naputke. 234 00:11:34,800 --> 00:11:37,870 Dakle, ova funkcija izgleda nekako zastrašujuće. 235 00:11:37,870 --> 00:11:39,120 To je dobio nekoliko parametara. 236 00:11:39,120 --> 00:11:40,430 Postoji mnogo događa ovdje. 237 00:11:40,430 --> 00:11:42,760 Postoji mnogo različitih Boje i tekstovi. 238 00:11:42,760 --> 00:11:47,100 Ali zapravo, to je samo generička verzija fgetc 239 00:11:47,100 --> 00:11:50,110 koji nam omogućuje da se bilo Količina informacija. 240 00:11:50,110 --> 00:11:53,560 To može biti malo neučinkovita ako smo dobivanje znakove jedan po jedan, 241 00:11:53,560 --> 00:11:55,770 iterating kroz datoteke jedan znak na vrijeme. 242 00:11:55,770 --> 00:12:00,230 Ne bi li bilo ljepše da se 100 na vrijeme ili 500 na vrijeme? 243 00:12:00,230 --> 00:12:03,250 >> Pa, fread i njegov suputnik funkcija fwrite, koje ćemo razgovarati o 244 00:12:03,250 --> 00:12:05,490 u drugi, dopustite nam da učinite upravo to. 245 00:12:05,490 --> 00:12:08,480 Možemo pročitati proizvoljan iznos informacija iz datoteke 246 00:12:08,480 --> 00:12:10,290 a mi ga pohraniti negdje privremeno. 247 00:12:10,290 --> 00:12:12,980 Umjesto da bude u mogućnosti da se samo stane ga u jednoj varijabli, 248 00:12:12,980 --> 00:12:15,790 mogli bismo ga morati pohraniti u niz. 249 00:12:15,790 --> 00:12:19,980 I tako, prolazimo u četiri argumenti za fread-- pokazivač 250 00:12:19,980 --> 00:12:23,940 do mjesta gdje smo ide za pohranu podataka, 251 00:12:23,940 --> 00:12:29,180 koliko je velika svaka jedinica podataka će biti, koliko jedinica podataka 252 00:12:29,180 --> 00:12:35,192 želimo steći, i od koje datoteke želimo ih dobiti. 253 00:12:35,192 --> 00:12:37,150 Vjerojatno je najbolje prikazano s primjerom ovdje. 254 00:12:37,150 --> 00:12:41,640 Dakle, recimo da mi izjavljujemo niz od 10 brojeva. 255 00:12:41,640 --> 00:12:45,080 Upravo smo proglasio na stog samovoljno int ARR 10. 256 00:12:45,080 --> 00:12:46,970 Dakle, to je prilično jednostavan. 257 00:12:46,970 --> 00:12:51,970 Što radimo iako Sada je frecall se mi čita veličinu int 258 00:12:51,970 --> 00:12:54,180 puta po 10 bajtova podataka. 259 00:12:54,180 --> 00:12:59,040 Veličina int bića four-- to veličina cijeli broj u c. 260 00:12:59,040 --> 00:13:02,790 >> Dakle, ono što mi radimo je da smo čitanje 40 bajtova vrijedi informacija 261 00:13:02,790 --> 00:13:05,850 iz spisa je ukazao na koju PTR. 262 00:13:05,850 --> 00:13:08,600 I mi smo pohranjivanje onima 40 bajtova negdje 263 00:13:08,600 --> 00:13:12,080 gdje smo postavili na stranu 40 bajtova vrijedan pamćenja. 264 00:13:12,080 --> 00:13:15,970 Srećom, već smo učinili da do izjavljujući ARR, kako niz upravo tamo. 265 00:13:15,970 --> 00:13:19,770 Da je sposoban za držanje 10 četiri bajta jedinice. 266 00:13:19,770 --> 00:13:22,860 Tako je u ukupno, to može držati 40 bajtova vrijedan informacija. 267 00:13:22,860 --> 00:13:26,540 A mi smo sada čitanja 40 bajtova informacija iz datoteke, 268 00:13:26,540 --> 00:13:30,330 a mi smo ga pohrane u ARR. 269 00:13:30,330 --> 00:13:35,470 >> Podsjetimo iz video na upućuje da naziv niza, kao što ARR, 270 00:13:35,470 --> 00:13:38,370 stvarno samo pokazivač na prvom elementu. 271 00:13:38,370 --> 00:13:43,680 Dakle, kada prolazimo u ARR tamo, su, u stvari, prolazi u pokazivača. 272 00:13:43,680 --> 00:13:46,120 >> Slično možemo učiniti this-- mi ne nužno 273 00:13:46,120 --> 00:13:51,200 morate spasiti naš tampon na stog. 274 00:13:51,200 --> 00:13:54,990 Mi također može dinamički alocirati tampon ovako, pomoću malloc. 275 00:13:54,990 --> 00:13:57,340 Zapamtite, kada smo dinamički alocirati memoriju, 276 00:13:57,340 --> 00:14:00,550 mi smo ga štedi na gomila, a ne snop. 277 00:14:00,550 --> 00:14:02,110 Ali to je još uvijek tampon. 278 00:14:02,110 --> 00:14:06,810 >> Još uvijek, u ovom slučaju, je drži 640 bajtova podataka 279 00:14:06,810 --> 00:14:09,230 jer dvostruka zauzima osam bajtova. 280 00:14:09,230 --> 00:14:11,570 A mi tražimo za 80 od njih. 281 00:14:11,570 --> 00:14:13,770 Želimo imati prostora držati 80 parovima. 282 00:14:13,770 --> 00:14:17,210 Dakle, 80 puta 8 je 640 bajtova podataka. 283 00:14:17,210 --> 00:14:21,880 I to poziv na fread je prikupljanje 640 bajtova podataka 284 00:14:21,880 --> 00:14:27,770 iz spisa je ukazao na koju PTR i pohranjivanje sada u arr2. 285 00:14:27,770 --> 00:14:32,770 >> Sada možemo liječiti fread baš kao poziv na fgetc. 286 00:14:32,770 --> 00:14:37,140 U ovom slučaju, mi samo pokušavamo dobiti jedan lik iz datoteke. 287 00:14:37,140 --> 00:14:40,070 A mi ne trebaju Niz održati karakter. 288 00:14:40,070 --> 00:14:43,170 Mi samo možemo pohraniti u varijabla karakter. 289 00:14:43,170 --> 00:14:46,390 >> Kvaka je, međutim, da je kad smo samo varijablu, 290 00:14:46,390 --> 00:14:50,290 moramo proći u adresu te varijable 291 00:14:50,290 --> 00:14:52,550 jer Sjetite se da je Prvi argument za fread 292 00:14:52,550 --> 00:14:59,210 je pokazivač na mjesto i memorije gdje želimo pohraniti podatke. 293 00:14:59,210 --> 00:15:01,550 Opet, ime i prezime Niz je pokazivač. 294 00:15:01,550 --> 00:15:04,200 Dakle, ne trebamo učiniti ampersand niz. 295 00:15:04,200 --> 00:15:07,270 Ali c, znak c Ovdje, nije niz. 296 00:15:07,270 --> 00:15:08,390 To je samo varijabla. 297 00:15:08,390 --> 00:15:11,840 I tako moramo proći znak za struju c naznačiti 298 00:15:11,840 --> 00:15:15,350 da je to adresa na kojoj želimo pohraniti ovaj jedan bajt podataka, 299 00:15:15,350 --> 00:15:20,479 ovaj jedan lik koji smo prikupljanje iz PTR. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- ću proći ovo malo više 301 00:15:22,270 --> 00:15:25,440 quickly-- je ljepušan velik dio Točan ekvivalent fread 302 00:15:25,440 --> 00:15:27,720 osim što je za pisanje umjesto čitanja, samo 303 00:15:27,720 --> 00:15:31,610 poput other-- smo imali otvorene te u neposrednoj blizini, dobiti lik, 304 00:15:31,610 --> 00:15:32,530 napišite znak. 305 00:15:32,530 --> 00:15:35,040 Sada je mogao proizvoljna Količina informacija, 306 00:15:35,040 --> 00:15:37,170 Pravo proizvoljna količina podataka. 307 00:15:37,170 --> 00:15:39,790 Dakle, baš kao i prije, možemo imaju niz od 10 brojeva 308 00:15:39,790 --> 00:15:43,210 gdje smo već Podaci pohranjeni, možda. 309 00:15:43,210 --> 00:15:46,580 >> To je vjerojatno neka linija koda koji bi trebao ići između ove dvije 310 00:15:46,580 --> 00:15:49,990 gdje sam ispuniti ARR s nešto suvislo. 311 00:15:49,990 --> 00:15:51,880 Ja ispunite ga s 10 različitih brojeva. 312 00:15:51,880 --> 00:15:54,920 I umjesto što sam radi se od pisanja ARR 313 00:15:54,920 --> 00:15:58,600 i prikupljanje informacija od ARR. 314 00:15:58,600 --> 00:16:02,390 I Vodim te podatke i stavljajući ga u datoteku. 315 00:16:02,390 --> 00:16:05,410 >> Dakle, umjesto da bude iz datoteka u međuspremnik, 316 00:16:05,410 --> 00:16:08,790 sada idemo iz tampon na datoteku. 317 00:16:08,790 --> 00:16:10,580 Tako da je upravo obrnuto. 318 00:16:10,580 --> 00:16:16,680 Pa opet, baš kao i prije, možemo također imaju hrpu komad memorije 319 00:16:16,680 --> 00:16:19,600 koje smo dinamički dodjeljuje i čitati iz toga 320 00:16:19,600 --> 00:16:21,570 i napisati da u datoteku. 321 00:16:21,570 --> 00:16:24,900 >> I mi također imaju jednu varijablu sposoban za držanje jedan bajt 322 00:16:24,900 --> 00:16:27,200 informacija, kao što je lik. 323 00:16:27,200 --> 00:16:29,830 Ali opet, mi moramo proći adresu te varijable 324 00:16:29,830 --> 00:16:31,840 kada želimo čitati iz nje. 325 00:16:31,840 --> 00:16:35,280 Tako možemo napisati podatke nailazimo na toj adresi 326 00:16:35,280 --> 00:16:39,050 u datoteku pokazivač, PTR. 327 00:16:39,050 --> 00:16:41,630 >> Postoji mnogo drugih veliki file I / O funkcije 328 00:16:41,630 --> 00:16:44,650 kako napraviti razne stvari osim one što smo razgovarali o tome danas. 329 00:16:44,650 --> 00:16:46,450 Nekoliko onih možda ćete naći korisne 330 00:16:46,450 --> 00:16:50,840 su fgets i fputs, koje su ekvivalent 331 00:16:50,840 --> 00:16:56,190 od fgetc i fputc, ali za čitanje jedan string iz datoteke. 332 00:16:56,190 --> 00:16:59,020 Umjesto jednog lika, to će pročitati cijeli niz. 333 00:16:59,020 --> 00:17:02,940 fprintf, koji u osnovi omogućuje korištenje printf pisati u datoteku. 334 00:17:02,940 --> 00:17:05,619 Dakle, baš kao što se može učiniti varijabla zamjena korištenja 335 00:17:05,619 --> 00:17:09,900 rezerviranih mjesta posto ja i posto d, i tako dalje, s printf 336 00:17:09,900 --> 00:17:14,690 što slično može uzeti printf string i ispisati nešto 337 00:17:14,690 --> 00:17:16,800 kao što je to u datoteku. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- ako imate DVD player je analogija Ja obično koriste here-- 339 00:17:20,720 --> 00:17:23,109 je vrsta poput koristeći svoje premotavati i brzo naprijed 340 00:17:23,109 --> 00:17:25,819 tipke za pomicanje film. 341 00:17:25,819 --> 00:17:28,369 Isto tako, možete kretati datoteke. 342 00:17:28,369 --> 00:17:30,250 Jedna od stvari unutar da struktura datoteke 343 00:17:30,250 --> 00:17:34,270 da c stvara za vas je pokazatelj gdje ste u spisu. 344 00:17:34,270 --> 00:17:36,420 Jeste li na samom s početkom, na byte nula? 345 00:17:36,420 --> 00:17:39,290 Jeste li u bajtu 100, byte 1000, i tako dalje? 346 00:17:39,290 --> 00:17:44,340 Možete koristiti fseek samovoljno pomicati da Indikator naprijed ili natrag. 347 00:17:44,340 --> 00:17:46,744 >> I ftell, opet sličan DVD player, 348 00:17:46,744 --> 00:17:49,660 je kao mali sat koji govori ti koliko minuta i sekundi 349 00:17:49,660 --> 00:17:52,480 su se u određenom film. 350 00:17:52,480 --> 00:17:56,990 Slično tome, ftell vas kako govori mnogi bajtova ste u datoteku. 351 00:17:56,990 --> 00:18:00,210 feof je drugačija verzija otkrivanja li ste 352 00:18:00,210 --> 00:18:01,700 do kraja datoteke. 353 00:18:01,700 --> 00:18:03,600 I ferror je funkcija koje možete koristiti 354 00:18:03,600 --> 00:18:06,959 otkriti je li nešto mora pošlo krivo rad s datotekom. 355 00:18:06,959 --> 00:18:08,750 Opet, to je samo grebanje površine. 356 00:18:08,750 --> 00:18:12,730 Tu je još mnogo više datoteka I / O funkcije u standardnoj io.h. 357 00:18:12,730 --> 00:18:16,620 Ali to će vjerojatno dobiti počeo raditi s datotečnim upućuje. 358 00:18:16,620 --> 00:18:17,640 Ja sam Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 To je cs50. 360 00:18:19,750 --> 00:18:21,669