1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> SPEAKER: Setakat ini, kemungkinan bahawa kebanyakan program anda 3 00:00:07,870 --> 00:00:10,170 menjadi sedikit tidak kekal. 4 00:00:10,170 --> 00:00:13,310 Anda menjalankan program seperti Mario atau tamak. 5 00:00:13,310 --> 00:00:17,350 Ia melakukan sesuatu, ia mungkin meminta pengguna untuk beberapa maklumat, 6 00:00:17,350 --> 00:00:20,400 mencetak beberapa output dengan skrin, tetapi kemudian apabila program anda lebih, 7 00:00:20,400 --> 00:00:23,252 ada benar-benar ada bukti terdapat ia pernah berjalan di tempat pertama. 8 00:00:23,252 --> 00:00:25,960 Maksud saya, pasti, anda mungkin telah meninggalkan ia membuka dalam tetingkap terminal, 9 00:00:25,960 --> 00:00:29,770 tetapi jika anda mengosongkan skrin anda, ada benar-benar ada bukti bahawa ia wujud. 10 00:00:29,770 --> 00:00:33,720 Kami tidak mempunyai satu cara untuk menyimpan maklumat yang berterusan, maklumat 11 00:00:33,720 --> 00:00:36,890 yang wujud selepas kami program telah berhenti berjalan, 12 00:00:36,890 --> 00:00:39,241 atau kita tidak mempunyai sehingga ke tahap ini. 13 00:00:39,241 --> 00:00:41,490 Nasib baik walaupun, c tidak memberikan kami keupayaan 14 00:00:41,490 --> 00:00:44,220 untuk melakukan ini dengan melaksanakan sesuatu yang dinamakan 15 00:00:44,220 --> 00:00:48,330 fail, struktur yang yang pada dasarnya mewakili fail yang anda akan menggandakan 16 00:00:48,330 --> 00:00:53,826 klik pada komputer anda, jika anda digunakan untuk persekitaran pengguna grafik. 17 00:00:53,826 --> 00:00:55,700 Secara umumnya apabila bekerja dengan c, kami sebenarnya 18 00:00:55,700 --> 00:00:59,965 akan bekerja dengan petunjuk untuk files-- fail stars-- 19 00:00:59,965 --> 00:01:02,090 kecuali sedikit apabila kita bercakap mengenai pasangan 20 00:01:02,090 --> 00:01:04,560 fungsi yang bekerja dengan petunjuk fail. 21 00:01:04,560 --> 00:01:08,990 Anda tidak perlu telah benar-benar menggali terlalu dalam ke dalam petunjuk pemahaman 22 00:01:08,990 --> 00:01:09,730 diri mereka sendiri. 23 00:01:09,730 --> 00:01:12,870 Ada sedikit pemudi kecil di mana kita akan bercakap tentang mereka, 24 00:01:12,870 --> 00:01:18,090 tetapi secara umumnya memfailkan petunjuk dan petunjuk, manakala yang saling berkaitan, 25 00:01:18,090 --> 00:01:20,290 tidak betul-betul perkara yang sama. 26 00:01:20,290 --> 00:01:22,440 >> Sekarang apa yang saya maksudkan apabila Aku berkata data kekal? 27 00:01:22,440 --> 00:01:23,650 Apakah data kekal? 28 00:01:23,650 --> 00:01:25,232 Mengapa kita mengambil berat tentang perkara ini? 29 00:01:25,232 --> 00:01:27,190 Berkata, sebagai contoh, yang anda menjalankan program yang 30 00:01:27,190 --> 00:01:29,850 atau anda telah ditulis semula yang program itu satu permainan, 31 00:01:29,850 --> 00:01:32,960 dan anda mahu untuk mengesan semua bergerak pengguna 32 00:01:32,960 --> 00:01:36,620 supaya mungkin jika ada masalah, anda boleh menyemak fail selepas permainan. 33 00:01:36,620 --> 00:01:39,970 Itulah apa yang kita maksudkan apabila kita bercakap mengenai data kekal. 34 00:01:39,970 --> 00:01:43,930 >> Dalam perjalanan berjalan anda program, fail yang dicipta. 35 00:01:43,930 --> 00:01:45,680 Dan apabila program anda telah berhenti berjalan, 36 00:01:45,680 --> 00:01:48,689 fail yang masih wujud pada sistem anda. 37 00:01:48,689 --> 00:01:50,230 Dan kita boleh melihat dan memeriksanya. 38 00:01:50,230 --> 00:01:53,670 Dan supaya program yang akan ditetapkan untuk telah mencipta beberapa data yang berterusan, 39 00:01:53,670 --> 00:01:57,390 data wujud selepas program telah selesai berjalan. 40 00:01:57,390 --> 00:02:02,320 >> Sekarang semua fungsi-fungsi yang bekerja dengan mewujudkan fail dan memanipulasi 41 00:02:02,320 --> 00:02:04,940 mereka dalam pelbagai cara hidup dalam io.h standard, 42 00:02:04,940 --> 00:02:08,210 yang merupakan fail kepala yang anda mungkin telah paun 43 00:02:08,210 --> 00:02:10,910 termasuk di bahagian atas cukup banyak semua program anda 44 00:02:10,910 --> 00:02:14,130 kerana ia mengandungi salah satu daripada paling fungsi yang berguna untuk kita, 45 00:02:14,130 --> 00:02:16,130 printf, yang juga membolehkan tinggal di io.h. standard 46 00:02:16,130 --> 00:02:20,400 Jadi anda tidak perlu untuk menumbuk termasuk apa-apa fail tambahan mungkin 47 00:02:20,400 --> 00:02:23,540 untuk bekerja dengan petunjuk fail. 48 00:02:23,540 --> 00:02:29,980 >> Sekarang setiap fungsi penunjuk fail, atau setiap fail I / O, output input 49 00:02:29,980 --> 00:02:33,310 fungsi, menerima sebagai salah parameter atau input 50 00:02:33,310 --> 00:02:35,822 yang pointer-- fail kecuali untuk satu, fopen, yang 51 00:02:35,822 --> 00:02:38,280 adalah apa yang anda gunakan untuk mendapatkan fail penunjuk di tempat pertama. 52 00:02:38,280 --> 00:02:41,010 Tetapi selepas anda membuka memfailkan dan anda mendapat petunjuk fail, 53 00:02:41,010 --> 00:02:43,510 anda boleh lulus mereka sebagai hujah untuk pelbagai fungsi 54 00:02:43,510 --> 00:02:46,720 kita akan bercakap tentang hari ini, serta lain-lain lagi 55 00:02:46,720 --> 00:02:48,520 supaya anda boleh bekerja dengan fail. 56 00:02:48,520 --> 00:02:50,980 >> Jadi terdapat enam cantik yang asas biasa 57 00:02:50,980 --> 00:02:52,870 bahawa kita akan bercakap tentang hari ini. 58 00:02:52,870 --> 00:02:57,160 fopen dan temannya fungsi fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 dan fputc fungsi temannya, dan fread dan fungsi temannya, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Jadi mari kita mendapatkan hak ke dalamnya. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- apa yang ia buat? 63 00:03:07,050 --> 00:03:10,050 Nah, ia membuka fail dan ia memberikan penunjuk fail kepadanya, 64 00:03:10,050 --> 00:03:14,000 supaya anda boleh menggunakannya memfailkan penunjuk sebagai hujah 65 00:03:14,000 --> 00:03:16,730 kepada mana-mana fail lain I / O fungsi. 66 00:03:16,730 --> 00:03:19,100 Perkara yang paling penting ingat dengan fopen 67 00:03:19,100 --> 00:03:24,222 adalah bahawa selepas anda telah membuka fail atau membuat panggilan seperti yang di sini, 68 00:03:24,222 --> 00:03:26,930 anda perlu periksa untuk memastikan bahawa penunjuk bahawa anda mendapat kembali 69 00:03:26,930 --> 00:03:28,320 tidak sama dengan nol. 70 00:03:28,320 --> 00:03:31,320 Jika anda tidak menonton video pada petunjuk, ini tidak mungkin masuk akal. 71 00:03:31,320 --> 00:03:35,639 Tetapi jika anda cuba dan dereference penarikan balik penunjuk null, 72 00:03:35,639 --> 00:03:38,180 program anda mungkin akan mengalami segmentasi yang [didengar]. 73 00:03:38,180 --> 00:03:40,540 Kami mahu memastikan bahawa kita mendapat kembali penunjuk sah. 74 00:03:40,540 --> 00:03:43,665 Sebahagian besar masa kita akan telah mendapat pointer yang sah balik 75 00:03:43,665 --> 00:03:45,280 dan ia tidak akan menjadi masalah. 76 00:03:45,280 --> 00:03:46,760 >> Jadi bagaimana kita membuat panggilan kepada fopen? 77 00:03:46,760 --> 00:03:48,051 Ia kelihatan cukup banyak seperti ini. 78 00:03:48,051 --> 00:03:52,690 Fail bintang ptr-- PTR menjadi generik menamakan fail pointer-- fopen 79 00:03:52,690 --> 00:03:57,300 dan kami lulus dalam dua perkara, nama fail dan operasi yang kami mahu lakukan. 80 00:03:57,300 --> 00:04:01,690 Oleh itu, kita mungkin mempunyai panggilan yang kelihatan seperti this-- ptr fail bintang 1 sama fopen 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 Dan operasi yang saya telah dipilih adalah r. 83 00:04:07,020 --> 00:04:08,639 >> Jadi, apa yang anda berfikir r adalah di sini? 84 00:04:08,639 --> 00:04:11,180 Apakah jenis perkara yang kita mungkin boleh lakukan untuk fail? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Jadi r adalah operasi yang kita memilih apabila kita mahu membaca fail. 87 00:04:17,500 --> 00:04:20,260 Oleh itu, kita akan pada dasarnya apabila kita membuat panggilan seperti ini 88 00:04:20,260 --> 00:04:25,440 akan mendapat diri kita penunjuk fail seperti yang kita kemudian boleh membaca maklumat 89 00:04:25,440 --> 00:04:27,770 dari file1.txt. 90 00:04:27,770 --> 00:04:34,190 >> Begitu juga, kita boleh membuka fail 2.txt untuk menulis dan dengan itu kita boleh lulus ptr2, 91 00:04:34,190 --> 00:04:38,210 penunjuk fail saya telah membuat di sini, sebagai hujah kepada mana-mana fungsi yang 92 00:04:38,210 --> 00:04:40,080 menulis maklumat ke fail. 93 00:04:40,080 --> 00:04:43,767 Dan sama dengan bertulis, ada juga pilihan untuk menambah, a. 94 00:04:43,767 --> 00:04:45,600 Perbezaan antara menulis dan appending 95 00:04:45,600 --> 00:04:50,920 adalah bahawa apabila anda menulis ke fail, jika anda membuat panggilan kepada fopen untuk menulis 96 00:04:50,920 --> 00:04:54,761 dan fail yang telah wujud, ia adalah akan menulis ganti keseluruhan fail. 97 00:04:54,761 --> 00:04:56,510 Ia akan mula pada awal-awal, 98 00:04:56,510 --> 00:04:58,820 memotong semua maklumat yang yang sudah ada. 99 00:04:58,820 --> 00:05:02,210 >> Manakala jika anda membukanya untuk melampirkan, ia akan pergi ke akhir fail 100 00:05:02,210 --> 00:05:04,340 jika ada sudah teks dalam atau maklumat di dalamnya, 101 00:05:04,340 --> 00:05:06,040 dan ia akan mula menulis dari sana. 102 00:05:06,040 --> 00:05:08,570 Jadi, anda tidak akan kehilangan mana-mana daripada maklumat yang anda lakukan sebelum ini. 103 00:05:08,570 --> 00:05:12,110 Sama ada anda mahu untuk menulis atau menambah jenis bergantung kepada keadaan. 104 00:05:12,110 --> 00:05:16,840 Tetapi anda mungkin akan tahu apa yang operasi betul adalah apabila tiba masanya. 105 00:05:16,840 --> 00:05:18,020 Jadi itulah fopen. 106 00:05:18,020 --> 00:05:18,930 >> Bagaimana pula fclose? 107 00:05:18,930 --> 00:05:21,600 Nah, cukup mudah, fclose hanya menerima penunjuk fail. 108 00:05:21,600 --> 00:05:24,000 Dan seperti yang anda jangkakan, ia menutup fail itu. 109 00:05:24,000 --> 00:05:29,270 Dan sebaik sahaja kami telah ditutup fail, kita tidak boleh melaksanakan apa-apa fail lebih I / O fungsi, 110 00:05:29,270 --> 00:05:31,420 membaca atau menulis, pada fail itu. 111 00:05:31,420 --> 00:05:36,444 Kita perlu membuka semula memfailkan satu masa yang lain untuk 112 00:05:36,444 --> 00:05:38,610 untuk terus bekerja dengan dengan menggunakan fungsi I / O. 113 00:05:38,610 --> 00:05:41,520 Cara supaya fclose kita selesai bekerja dengan fail ini. 114 00:05:41,520 --> 00:05:44,690 Dan semua kita perlu lulus dalam adalah nama penunjuk fail. 115 00:05:44,690 --> 00:05:50,010 Maka pada pasangan slaid yang lalu, kami fail fopened 1 dot teks untuk membaca 116 00:05:50,010 --> 00:05:52,854 dan kami diberikan bahawa memfailkan penunjuk kepada ptr1. 117 00:05:52,854 --> 00:05:55,020 Sekarang kita telah membuat keputusan kami selesai membaca dari fail itu. 118 00:05:55,020 --> 00:05:56,561 Kita tidak perlu melakukan apa-apa lagi dengannya. 119 00:05:56,561 --> 00:05:58,890 Kita boleh ptr1 hanya fclose. 120 00:05:58,890 --> 00:06:01,950 Begitu juga, boleh kita fclose orang-orang lain. 121 00:06:01,950 --> 00:06:02,450 Baiklah. 122 00:06:02,450 --> 00:06:03,700 Jadi yang yang membuka dan menutup. 123 00:06:03,700 --> 00:06:05,780 Mereka adalah dua asas memulakan operasi. 124 00:06:05,780 --> 00:06:08,050 >> Sekarang kita mahu sebenarnya melakukan beberapa perkara yang menarik, 125 00:06:08,050 --> 00:06:11,940 dan fungsi yang pertama yang kita akan melihat bahawa akan melakukan yang fgetc-- 126 00:06:11,940 --> 00:06:14,110 memfailkan mendapatkan watak. 127 00:06:14,110 --> 00:06:17,350 Itulah yang fgetc umumnya akan diterjemahkan kepada. 128 00:06:17,350 --> 00:06:20,190 Matlamatnya dalam hidup adalah untuk membaca aksara seterusnya, 129 00:06:20,190 --> 00:06:22,079 atau jika ini adalah sangat anda Panggilan pertama kepada fgetc 130 00:06:22,079 --> 00:06:23,870 untuk fail tertentu, watak pertama. 131 00:06:23,870 --> 00:06:26,210 Tetapi selepas itu, anda yang seterusnya, 132 00:06:26,210 --> 00:06:31,500 watak yang seterusnya fail itu, dan kedai dalam pembolehubah watak. 133 00:06:31,500 --> 00:06:34,490 Seperti yang kita telah dilakukan di sini, char ch sama fgetc, 134 00:06:34,490 --> 00:06:36,389 lulus dalam nama penunjuk fail. 135 00:06:36,389 --> 00:06:38,180 Sekali lagi, ia sangat penting di sini untuk mengingati 136 00:06:38,180 --> 00:06:41,430 bahawa untuk mempunyai operasi ini berjaya, 137 00:06:41,430 --> 00:06:45,690 penunjuk fail itu sendiri must've telah dibuka untuk membaca. 138 00:06:45,690 --> 00:06:50,589 Kita tidak boleh membaca watak dari fail penunjuk yang kami membuka untuk menulis. 139 00:06:50,589 --> 00:06:52,630 Jadi, itu salah satu daripada batasan fopen, bukan? 140 00:06:52,630 --> 00:06:55,470 Kita perlu menyekat diri kita hanya melaksanakan 141 00:06:55,470 --> 00:06:57,710 satu operasi dengan satu fail penunjuk. 142 00:06:57,710 --> 00:07:00,220 Jika kita mahu untuk membaca dan menulis dari fail yang sama, 143 00:07:00,220 --> 00:07:03,840 kita perlu terbuka dua berasingan petunjuk fail untuk file-- yang sama 144 00:07:03,840 --> 00:07:05,670 satu untuk membaca, satu untuk menulis. 145 00:07:05,670 --> 00:07:08,400 >> Jadi sekali lagi, satu-satunya sebab Saya membawa bahawa sehingga kini adalah 146 00:07:08,400 --> 00:07:11,920 kerana jika kita akan membuat panggilan untuk fgetc, bahawa penunjuk fail must've 147 00:07:11,920 --> 00:07:14,172 telah dibuka untuk membaca. 148 00:07:14,172 --> 00:07:15,880 Dan kemudian cantik semata-mata, semua yang perlu kita lakukan 149 00:07:15,880 --> 00:07:17,546 adalah lulus dalam nama penunjuk fail. 150 00:07:17,546 --> 00:07:21,060 Jadi ch char sama ptr1 fgetc. 151 00:07:21,060 --> 00:07:23,200 >> Yang akan membawa kita character-- seterusnya 152 00:07:23,200 --> 00:07:25,575 atau sekali lagi, jika ini adalah yang pertama masa kita telah membuat panggilan ini, 153 00:07:25,575 --> 00:07:29,750 character-- pertama apa sahaja fail ditunjukkan oleh ptr1. 154 00:07:29,750 --> 00:07:32,210 Ingat bahawa itu adalah fail 1 dot teks. 155 00:07:32,210 --> 00:07:36,490 Ia akan mendapat watak pertama yang dan kami akan menyimpannya di ch yang berubah-ubah. 156 00:07:36,490 --> 00:07:37,941 Agak mudah. 157 00:07:37,941 --> 00:07:40,190 Oleh itu, kita hanya melihat tiga fungsi dan sudah kita 158 00:07:40,190 --> 00:07:43,070 boleh melakukan sesuatu yang cukup kemas. 159 00:07:43,070 --> 00:07:46,320 >> Jadi, jika kita mengambil keupayaan ini untuk mendapatkan watak 160 00:07:46,320 --> 00:07:48,943 dan kami gelung kitab itu jadi kami terus mendapat watak-watak 161 00:07:48,943 --> 00:07:51,390 dari fail ke atas dan berulang-over-- sekarang kita 162 00:07:51,390 --> 00:07:54,500 boleh membaca setiap satu watak fail. 163 00:07:54,500 --> 00:07:58,670 Dan jika kita mencetak setiap watak serta-merta selepas kita membacanya, 164 00:07:58,670 --> 00:08:01,960 kita kini telah dibaca dari fail dan dicetak kandungannya ke skrin. 165 00:08:01,960 --> 00:08:05,610 Kami telah dirangkaikan dengan berkesan fail yang pada skrin. 166 00:08:05,610 --> 00:08:09,670 Dan itulah apa yang Linux arahan kucing tidak. 167 00:08:09,670 --> 00:08:13,250 >> Jika anda menaip kucing dalam nama fail, ia akan mencetak keseluruhan kandungan 168 00:08:13,250 --> 00:08:15,160 fail dalam tetingkap terminal anda. 169 00:08:15,160 --> 00:08:19,010 Dan supaya gelung ini sedikit di sini, hanya tiga baris kod, 170 00:08:19,010 --> 00:08:23,270 tetapi ia berkesan atau bertindih perintah kucing Linux. 171 00:08:23,270 --> 00:08:25,210 Jadi sintaks ini mungkin kelihatan sedikit pelik, 172 00:08:25,210 --> 00:08:26,670 tetapi di sini adalah apa yang berlaku di sini. 173 00:08:26,670 --> 00:08:31,460 Walaupun ch sama fgetc, ptr tidak sama dengan EOF-- ia adalah satu hal yg keseluruhan, 174 00:08:31,460 --> 00:08:34,669 tetapi mari kita memecahkan ia ke bawah hanya supaya lebih jelas mengenai sintaks. 175 00:08:34,669 --> 00:08:37,169 Saya telah disatukan ia demi ruang, 176 00:08:37,169 --> 00:08:39,049 walaupun ia sedikit sintaksis yang rumit. 177 00:08:39,049 --> 00:08:41,194 >> Jadi bahagian ini dalam hak hijau sekarang, apa yang ia lakukan? 178 00:08:41,194 --> 00:08:42,860 Nah, itu hanya panggilan fgetc kita, bukan? 179 00:08:42,860 --> 00:08:44,530 Kita telah melihat bahawa sebelum. 180 00:08:44,530 --> 00:08:49,500 Ia mendapatkan satu watak dari fail. 181 00:08:49,500 --> 00:08:53,220 Kemudian kita bandingkan bahawa watak terhadap EOF. 182 00:08:53,220 --> 00:08:57,470 EOF adalah nilai istimewa itulah ditakrifkan dalam io.h standard, yang 183 00:08:57,470 --> 00:08:59,390 adalah akhir watak fail. 184 00:08:59,390 --> 00:09:03,450 Jadi, pada asasnya apa yang akan berlaku adalah gelung ini akan membaca watak, 185 00:09:03,450 --> 00:09:07,445 membandingkannya dengan EOF, yang akhir watak fail. 186 00:09:07,445 --> 00:09:10,070 Jika mereka tidak sepadan, jadi kami tidak mempunyai sampai ke penghujung fail, 187 00:09:10,070 --> 00:09:11,490 kami akan mencetak watak yang keluar. 188 00:09:11,490 --> 00:09:13,740 Kemudian kami akan kembali kepada bermula gelung lagi. 189 00:09:13,740 --> 00:09:18,310 Kami akan mendapatkan watak, semak terhadap EOF, mencetak, dan sebagainya 190 00:09:18,310 --> 00:09:21,094 dan sebagainya dan sebagainya, menggelung melalui dengan cara itu 191 00:09:21,094 --> 00:09:22,760 sehingga kita telah sampai ke penghujung fail. 192 00:09:22,760 --> 00:09:24,593 Dan kemudian oleh ketika itu, kita akan dicetak 193 00:09:24,593 --> 00:09:26,210 daripada keseluruhan kandungan fail. 194 00:09:26,210 --> 00:09:29,450 Jadi sekali lagi, kami telah hanya dilihat fopen, fclose dan fgetc 195 00:09:29,450 --> 00:09:34,950 dan sudah kita boleh pendua arahan terminal Linux. 196 00:09:34,950 --> 00:09:38,850 >> Seperti yang saya katakan pada awal, kita mempunyai fgetc dan fputc, 197 00:09:38,850 --> 00:09:41,860 dan fputc adalah sahabat fungsi fgetc. 198 00:09:41,860 --> 00:09:44,880 Dan sebagainya, seperti yang anda bayangkan, ia adalah tulisan bersamaan. 199 00:09:44,880 --> 00:09:49,440 Ia membolehkan kita untuk memberi satu watak ke fail. 200 00:09:49,440 --> 00:09:53,290 >> Sekali lagi, kaveat ini, hanya seperti ia adalah dengan fgetc, fail 201 00:09:53,290 --> 00:09:56,660 yang kita menulis untuk must've telah dibuka untuk menulis atau untuk melampirkan. 202 00:09:56,660 --> 00:10:00,820 Jika kita cuba dan menggunakan fputc pada fail bahawa kita telah dibuka untuk membaca, 203 00:10:00,820 --> 00:10:02,760 kita akan mengalami sedikit kesilapan. 204 00:10:02,760 --> 00:10:04,440 Tetapi panggilan tersebut adalah agak mudah. 205 00:10:04,440 --> 00:10:08,000 modal fputc ptr2 A, semua yang akan lakukan adalah ia 206 00:10:08,000 --> 00:10:12,040 akan menulis surat kepada A ke dalam fail 2 dot 207 00:10:12,040 --> 00:10:14,760 teks, yang merupakan nama fail yang kita dibuka dan diberikan 208 00:10:14,760 --> 00:10:17,280 penunjuk kepada ptr2. 209 00:10:17,280 --> 00:10:20,430 Jadi, kita akan menulis modal A untuk memfailkan 2 dot teks. 210 00:10:20,430 --> 00:10:24,592 Dan kami akan menulis seru menunjukkan fail 3 dot 211 00:10:24,592 --> 00:10:27,330 teks, yang telah ditunjukkan oleh ptr3. 212 00:10:27,330 --> 00:10:29,730 Jadi sekali lagi, cukup jelas dan mudah di sini. 213 00:10:29,730 --> 00:10:32,727 >> Tetapi sekarang kita boleh melakukan perkara lain. 214 00:10:32,727 --> 00:10:34,560 Kami mempunyai contoh ini kami hanya pergi ke atas 215 00:10:34,560 --> 00:10:38,950 kira-kira yang dapat meniru kucing Arahan Linux, salah satu yang mencetak keluar 216 00:10:38,950 --> 00:10:40,500 ke skrin. 217 00:10:40,500 --> 00:10:43,510 Nah, sekarang kita mempunyai keupayaan untuk membaca aksara dari fail 218 00:10:43,510 --> 00:10:46,590 dan menulis aksara untuk fail, mengapa tidak kita hanya menggantikan yang 219 00:10:46,590 --> 00:10:50,720 panggilan untuk printf dengan panggilan untuk fputc. 220 00:10:50,720 --> 00:10:54,090 >> Dan sekarang kami telah diulang cp, perintah yang sangat asas Linux 221 00:10:54,090 --> 00:10:59,100 yang kita bercakap tentang cara lama lalu di Linux arahan video. 222 00:10:59,100 --> 00:11:01,070 Kami telah berkesan diulang bahawa di sini. 223 00:11:01,070 --> 00:11:04,790 Kami membaca watak dan kemudian kami bertulis bahawa watak untuk fail lain. 224 00:11:04,790 --> 00:11:07,660 Membaca dari satu fail, penulisan yang lain, berulang-ulang 225 00:11:07,660 --> 00:11:11,350 dan lagi sehingga kita mencapai EOF. 226 00:11:11,350 --> 00:11:14,250 Kita mesti akhir memfailkan kami cuba untuk menyalin dari. 227 00:11:14,250 --> 00:11:18,500 Dan dengan itu kita akan telah menulis semua satu watak kita perlu fail 228 00:11:18,500 --> 00:11:19,500 yang kita menulis kepada. 229 00:11:19,500 --> 00:11:24,270 Jadi ini adalah cp, perintah salinan Linux. 230 00:11:24,270 --> 00:11:26,550 >> Pada awal-awal video ini, saya mempunyai kaveat 231 00:11:26,550 --> 00:11:29,840 bahawa kita akan bercakap sedikit sedikit tentang petunjuk. 232 00:11:29,840 --> 00:11:32,480 Berikut adalah khusus di mana kita berada akan bercakap tentang petunjuk 233 00:11:32,480 --> 00:11:34,800 sebagai tambahan untuk memfailkan petunjuk. 234 00:11:34,800 --> 00:11:37,870 Jadi fungsi ini kelihatan jenis menakutkan. 235 00:11:37,870 --> 00:11:39,120 Ia mempunyai beberapa parameter. 236 00:11:39,120 --> 00:11:40,430 Ada banyak berlaku di sini. 237 00:11:40,430 --> 00:11:42,760 Ada banyak yang berbeza warna dan teks. 238 00:11:42,760 --> 00:11:47,100 Tetapi sebenarnya, ia hanya versi generik fgetc 239 00:11:47,100 --> 00:11:50,110 yang membolehkan kita untuk mendapat apa-apa jumlah maklumat. 240 00:11:50,110 --> 00:11:53,560 Ia boleh agak tidak cekap jika kita mendapat aksara satu demi satu, 241 00:11:53,560 --> 00:11:55,770 iterating melalui fail satu aksara pada satu masa. 242 00:11:55,770 --> 00:12:00,230 Bukankah lebih bagus untuk mendapatkan 100 pada satu masa atau 500 pada satu masa? 243 00:12:00,230 --> 00:12:03,250 >> Nah, fread dan fungsi temannya fwrite, yang kita akan bercakap tentang 244 00:12:03,250 --> 00:12:05,490 dalam kedua, membolehkan kita untuk melakukan hal itu. 245 00:12:05,490 --> 00:12:08,480 Kita boleh membaca satu jumlah yang sewenang-wenangnya maklumat dari fail 246 00:12:08,480 --> 00:12:10,290 dan kami menyimpannya di suatu tempat buat sementara waktu. 247 00:12:10,290 --> 00:12:12,980 Bukannya dapat hanya muat dalam pembolehubah tunggal, 248 00:12:12,980 --> 00:12:15,790 kita mungkin perlu menyimpannya di dalam array. 249 00:12:15,790 --> 00:12:19,980 Dan sebagainya, kita lulus dalam empat hujah untuk fread-- penunjuk 250 00:12:19,980 --> 00:12:23,940 ke lokasi di mana kami akan menyimpan maklumat, 251 00:12:23,940 --> 00:12:29,180 bagaimana besar setiap unit maklumat akan, berapa unit maklumat 252 00:12:29,180 --> 00:12:35,192 kita mahu untuk memperoleh, dan dari mana fail yang kita mahu untuk mendapatkan mereka. 253 00:12:35,192 --> 00:12:37,150 Mungkin boleh ditunjukkan dengan jelas dengan contoh di sini. 254 00:12:37,150 --> 00:12:41,640 Jadi mari kita mengatakan bahawa kita mengisytiharkan pelbagai 10 integer. 255 00:12:41,640 --> 00:12:45,080 Kami baru sahaja diisytiharkan pada stack sewenang-wenangnya int arr 10. 256 00:12:45,080 --> 00:12:46,970 Jadi, itu agak mudah. 257 00:12:46,970 --> 00:12:51,970 Sekarang apa yang kita lakukan walaupun adalah frecall adalah kita saiz int membaca 258 00:12:51,970 --> 00:12:54,180 kali 10 bait maklumat. 259 00:12:54,180 --> 00:12:59,040 Saiz int makhluk four-- itulah saiz integer di c. 260 00:12:59,040 --> 00:13:02,790 >> Jadi apa yang kita lakukan adalah kita membaca 40 bait bernilai maklumat 261 00:13:02,790 --> 00:13:05,850 dari fail yang ditunjukkan oleh ptr. 262 00:13:05,850 --> 00:13:08,600 Dan kami menyimpan orang-orang 40 bait di suatu tempat 263 00:13:08,600 --> 00:13:12,080 di mana kita telah mengetepikan 40 bait bernilai memori. 264 00:13:12,080 --> 00:13:15,970 Nasib baik, kami telah dibentangkan dengan mengisytiharkan arr, array yang di sana. 265 00:13:15,970 --> 00:13:19,770 Yang mampu pegangan 10 unit empat bait. 266 00:13:19,770 --> 00:13:22,860 Jadi dalam jumlah, ia boleh tahan 40 bait bernilai maklumat. 267 00:13:22,860 --> 00:13:26,540 Dan kita sedang baca 40 bytes maklumat dari fail, 268 00:13:26,540 --> 00:13:30,330 dan kami menyimpannya dalam arr. 269 00:13:30,330 --> 00:13:35,470 >> Ingat dari video pada petunjuk yang nama pelbagai, seperti arr, 270 00:13:35,470 --> 00:13:38,370 adalah benar-benar hanya penunjuk kepada unsur pertama. 271 00:13:38,370 --> 00:13:43,680 Oleh itu, apabila kita lulus dalam arr sana, kami , sebenarnya, lulus dalam penunjuk. 272 00:13:43,680 --> 00:13:46,120 >> Begitu juga kita boleh melakukan this-- kita tidak semestinya 273 00:13:46,120 --> 00:13:51,200 perlu untuk menyelamatkan penampan kami pada timbunan. 274 00:13:51,200 --> 00:13:54,990 Kita boleh juga dinamik memperuntukkan satu penampan seperti ini, menggunakan malloc. 275 00:13:54,990 --> 00:13:57,340 Ingat, apabila kita dinamik memperuntukkan ingatan, 276 00:13:57,340 --> 00:14:00,550 kita menyimpannya di timbunan, bukan timbunan. 277 00:14:00,550 --> 00:14:02,110 Tetapi ia masih penampan. 278 00:14:02,110 --> 00:14:06,810 >> Ia masih, dalam kes ini, adalah memegang 640 bait maklumat 279 00:14:06,810 --> 00:14:09,230 kerana double yang mengambil masa sehingga lapan bait. 280 00:14:09,230 --> 00:14:11,570 Dan kami meminta 80 daripada mereka. 281 00:14:11,570 --> 00:14:13,770 Kami mahu mempunyai ruang untuk memegang 80 beregu. 282 00:14:13,770 --> 00:14:17,210 Jadi 80 kali 8 adalah maklumat 640 bait. 283 00:14:17,210 --> 00:14:21,880 Dan panggilan ke fread adalah mengumpul 640 bait maklumat 284 00:14:21,880 --> 00:14:27,770 dari fail yang ditunjukkan oleh PTR dan menyimpannya kini dalam arr2. 285 00:14:27,770 --> 00:14:32,770 >> Sekarang kita juga boleh merawat fread seperti panggilan kepada fgetc. 286 00:14:32,770 --> 00:14:37,140 Dalam kes ini, kita hanya cuba untuk mendapat satu watak dari fail. 287 00:14:37,140 --> 00:14:40,070 Dan kita tidak memerlukan mudah untuk memegang watak. 288 00:14:40,070 --> 00:14:43,170 Kita hanya boleh menyimpannya dalam pembolehubah watak. 289 00:14:43,170 --> 00:14:46,390 >> Tangkapan, walaupun, adalah bahawa apabila kita hanya perlu berubah-ubah, 290 00:14:46,390 --> 00:14:50,290 kita perlu lulus dalam alamat pembolehubah yang 291 00:14:50,290 --> 00:14:52,550 kerana ingat bahawa Hujah pertama untuk fread 292 00:14:52,550 --> 00:14:59,210 adalah penunjuk kepada lokasi dan memori di mana kita mahu untuk menyimpan maklumat. 293 00:14:59,210 --> 00:15:01,550 Sekali lagi, nama seorang Pelbagai adalah penunjuk. 294 00:15:01,550 --> 00:15:04,200 Oleh itu, kita tidak perlu untuk melakukan pelbagai Ampersand. 295 00:15:04,200 --> 00:15:07,270 Tetapi c, c watak di sini, tidak array. 296 00:15:07,270 --> 00:15:08,390 Ia hanya pembolehubah. 297 00:15:08,390 --> 00:15:11,840 Dan dengan itu kita perlu lulus Ampersand c untuk menunjukkan 298 00:15:11,840 --> 00:15:15,350 bahawa itulah alamat di mana kita mahu untuk menyimpan ini bait salah satu maklumat, 299 00:15:15,350 --> 00:15:20,479 watak ini salah satu yang kita memungut daripada ptr. 300 00:15:20,479 --> 00:15:22,270 Fwrite-- saya akan pergi melalui ini sedikit lebih 301 00:15:22,270 --> 00:15:25,440 quickly-- adalah lebih kurang bersamaan tepat fread 302 00:15:25,440 --> 00:15:27,720 kecuali ia untuk menulis bukannya membaca, hanya 303 00:15:27,720 --> 00:15:31,610 seperti other-- kita telah mempunyai terbuka dan dekat, mendapatkan watak, 304 00:15:31,610 --> 00:15:32,530 menulis watak. 305 00:15:32,530 --> 00:15:35,040 Kini sudah tiba mendapat sewenang-wenangnya jumlah maklumat, 306 00:15:35,040 --> 00:15:37,170 jumlah yang sewenang-wenangnya tepat maklumat. 307 00:15:37,170 --> 00:15:39,790 Jadi sama seperti sebelum ini, kita boleh mempunyai pelbagai 10 integer 308 00:15:39,790 --> 00:15:43,210 di mana kita sudah mempunyai maklumat yang disimpan, mungkin. 309 00:15:43,210 --> 00:15:46,580 >> Ia mungkin beberapa baris kod yang harus pergi di antara kedua-dua 310 00:15:46,580 --> 00:15:49,990 di mana saya mengisi arr dengan sesuatu yang bermakna. 311 00:15:49,990 --> 00:15:51,880 Saya isi dengan 10 integer berbeza. 312 00:15:51,880 --> 00:15:54,920 Dan sebaliknya, apa yang saya lakukan adalah menulis dari arr 313 00:15:54,920 --> 00:15:58,600 dan mengumpul maklumat dari arr. 314 00:15:58,600 --> 00:16:02,390 Dan saya mengambil maklumat yang dan memasukkannya ke dalam fail. 315 00:16:02,390 --> 00:16:05,410 >> Jadi, daripada ia menjadi dari fail ke penimbal, 316 00:16:05,410 --> 00:16:08,790 kita sedang pergi dari penimbal ke fail. 317 00:16:08,790 --> 00:16:10,580 Jadi ia hanya sebaliknya. 318 00:16:10,580 --> 00:16:16,680 Jadi sekali lagi, sama seperti sebelum ini, kita boleh juga mempunyai sebahagian timbunan memori 319 00:16:16,680 --> 00:16:19,600 yang kami telah dinamik diperuntukkan dan membaca itu 320 00:16:19,600 --> 00:16:21,570 dan menulis bahawa untuk fail. 321 00:16:21,570 --> 00:16:24,900 >> Dan kami juga mempunyai pembolehubah tunggal mampu memegang satu bait 322 00:16:24,900 --> 00:16:27,200 maklumat, seperti watak. 323 00:16:27,200 --> 00:16:29,830 Tetapi sekali lagi, kita perlu lulus dalam alamat pembolehubah yang 324 00:16:29,830 --> 00:16:31,840 apabila kita mahu membaca daripadanya. 325 00:16:31,840 --> 00:16:35,280 Oleh itu, kita boleh menulis maklumat yang kita dapati di alamat itu 326 00:16:35,280 --> 00:16:39,050 untuk penunjuk fail, PTR. 327 00:16:39,050 --> 00:16:41,630 >> Ada banyak lain fail yang besar I / O Fungsi 328 00:16:41,630 --> 00:16:44,650 yang melakukan pelbagai perkara selain orang-orang yang kita telah bercakap tentang hari ini. 329 00:16:44,650 --> 00:16:46,450 Beberapa orang-orang yang anda mungkin dapati berguna 330 00:16:46,450 --> 00:16:50,840 adalah fgets dan fputs, yang bersamaan 331 00:16:50,840 --> 00:16:56,190 daripada fgetc dan fputc tetapi untuk membaca rentetan tunggal dari fail. 332 00:16:56,190 --> 00:16:59,020 Sebaliknya yang bersifat tunggal, ia akan membaca keseluruhan tali. 333 00:16:59,020 --> 00:17:02,940 fprintf, yang pada dasarnya membolehkan anda menggunakan printf untuk menulis ke fail. 334 00:17:02,940 --> 00:17:05,619 Jadi seperti anda boleh melakukan penggantian pembolehubah menggunakan 335 00:17:05,619 --> 00:17:09,900 ruang letak peratus i dan peratus d, dan sebagainya, dengan printf 336 00:17:09,900 --> 00:17:14,690 anda sama boleh mengambil rentetan printf dan mencetak sesuatu 337 00:17:14,690 --> 00:17:16,800 seperti itu ke fail. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- jika anda mempunyai pemain DVD adalah analogi Saya biasanya menggunakan sini-- 339 00:17:20,720 --> 00:17:23,109 adalah jenis seperti menggunakan anda memutar balik dan ke hadapan yang laju 340 00:17:23,109 --> 00:17:25,819 butang untuk bergerak filem. 341 00:17:25,819 --> 00:17:28,369 Begitu juga, anda boleh bergerak di sekitar fail. 342 00:17:28,369 --> 00:17:30,250 Salah satu perkara yang di dalam bahawa struktur fail 343 00:17:30,250 --> 00:17:34,270 yang c mencipta untuk anda adalah petunjuk di mana anda berada dalam fail. 344 00:17:34,270 --> 00:17:36,420 Adakah anda sekurang- bermula, di bait sifar? 345 00:17:36,420 --> 00:17:39,290 Adakah anda di bait 100, bait 1000, dan sebagainya? 346 00:17:39,290 --> 00:17:44,340 Anda boleh menggunakan fseek untuk bergerak sewenang-wenangnya petunjuk yang ke hadapan atau ke belakang. 347 00:17:44,340 --> 00:17:46,744 >> Dan ftell, sekali lagi sama dengan pemain DVD, 348 00:17:46,744 --> 00:17:49,660 adalah seperti sebuah jam yang cantik yang memberitahu anda berapa minit dan saat anda 349 00:17:49,660 --> 00:17:52,480 adalah ke dalam filem tertentu. 350 00:17:52,480 --> 00:17:56,990 Begitu juga, ftell memberitahu anda bagaimana banyak bait anda ke dalam fail. 351 00:17:56,990 --> 00:18:00,210 feof adalah versi yang berbeza mengesan sama ada anda telah 352 00:18:00,210 --> 00:18:01,700 sampai ke penghujung fail. 353 00:18:01,700 --> 00:18:03,600 Dan ferror adalah fungsi yang boleh anda gunakan 354 00:18:03,600 --> 00:18:06,959 untuk mengesan sama ada sesuatu yang telah pergi kerja kena dengan fail. 355 00:18:06,959 --> 00:18:08,750 Sekali lagi, ini adalah hanya menggaru permukaan. 356 00:18:08,750 --> 00:18:12,730 Masih banyak lagi fail I / O fungsi dalam io.h. standard 357 00:18:12,730 --> 00:18:16,620 Tetapi ini mungkin akan membawa anda mula bekerja dengan petunjuk fail. 358 00:18:16,620 --> 00:18:17,640 Saya Doug Lloyd. 359 00:18:17,640 --> 00:18:19,750 Ini adalah cs50. 360 00:18:19,750 --> 00:18:21,669