1 00:00:00,000 --> 00:00:05,330 2 00:00:05,330 --> 00:00:07,870 >> KONUŞMACI: Şimdiye kadar, büyük olasılıkla programlarınızın çoğu bu 3 00:00:07,870 --> 00:00:10,170 Biraz geçici olmuştur. 4 00:00:10,170 --> 00:00:13,310 Siz Mario veya Açgözlü gibi bir programı çalıştırmak. 5 00:00:13,310 --> 00:00:17,350 Bu belki sorar, bir şey yok Bazı bilgiler için kullanım, 6 00:00:17,350 --> 00:00:20,400 ekrana bazı çıktı yazdırmak ama sonra program bitince 7 00:00:20,400 --> 00:00:23,252 Orada hiçbir kanıt orada gerçekten hiç ilk etapta çalıştırıldı. 8 00:00:23,252 --> 00:00:25,960 Eminim, sol olabilir, yani o, terminal penceresinde açmak 9 00:00:25,960 --> 00:00:29,770 Eğer ekranı temizlemek ama eğer var o var gerçekten hiçbir kanıt. 10 00:00:29,770 --> 00:00:33,720 Biz depolamak için bir araç yok Kalıcı bilgiler, bilgi 11 00:00:33,720 --> 00:00:36,890 Bu kızımız sonra var Program çalışırken durdu, 12 00:00:36,890 --> 00:00:39,241 ya da biz bu noktaya kadar değil. 13 00:00:39,241 --> 00:00:41,490 Neyse rağmen, c yapar yeteneği ile bize 14 00:00:41,490 --> 00:00:44,220 uygulayarak bunu bir şey denir 15 00:00:44,220 --> 00:00:48,330 Bir dosya, bir yapı temelde Eğer iki katına çıkacak bir dosyayı temsil 16 00:00:48,330 --> 00:00:53,826 sen eğer bilgisayarınızda tıklayın Bir grafik kullanıcı ortamına kullanılır. 17 00:00:53,826 --> 00:00:55,700 Genel olarak çalışırken c, biz aslında konum 18 00:00:55,700 --> 00:00:59,965 ile çalışıyor olacak işaretçileri dosyasını files-- için stars-- 19 00:00:59,965 --> 00:01:02,090 biraz dışında Biz bir çift hakkında konuşmak 20 00:01:02,090 --> 00:01:04,560 fonksiyonlarının olduğunu Dosya işaretçileri ile çalışır. 21 00:01:04,560 --> 00:01:08,990 Gerçekten kazdık gerekmez anlayış işaretçiler içine çok derin 22 00:01:08,990 --> 00:01:09,730 kendileri. 23 00:01:09,730 --> 00:01:12,870 Biraz ufacık biraz var Biz onlar hakkında konuşmak nerede, 24 00:01:12,870 --> 00:01:18,090 ancak genellikle işaretçileri dosya ve göstericiler, birbiriyle iken, 25 00:01:18,090 --> 00:01:20,290 tam olarak aynı şey değildir. 26 00:01:20,290 --> 00:01:22,440 >> Şimdi ne zaman ne demek istiyorsun Ben kalıcı veri demek? 27 00:01:22,440 --> 00:01:23,650 Kalıcı veri nedir? 28 00:01:23,650 --> 00:01:25,232 Bu konuda neden önemsiyorsun? 29 00:01:25,232 --> 00:01:27,190 Bu, örneğin, ki Bir program çalıştırıyorsanız 30 00:01:27,190 --> 00:01:29,850 veya yeniden yazılamaz olduğunuz bir bir oyun programı, 31 00:01:29,850 --> 00:01:32,960 ve takip etmek istediğiniz Kullanıcının hamle tüm 32 00:01:32,960 --> 00:01:36,620 böylece bir şey yanlış giderse belki eğer, Maçtan sonra dosyayı inceleyebilirsiniz. 33 00:01:36,620 --> 00:01:39,970 Yani ne zaman biz demek ne kalıcı veri hakkında konuşun. 34 00:01:39,970 --> 00:01:43,930 >> Çalışan derste senin Program, bir dosya oluşturulur. 35 00:01:43,930 --> 00:01:45,680 Ve ne zaman bir program çalışan durdu, 36 00:01:45,680 --> 00:01:48,689 Bu dosya hala sistemde bulunan. 37 00:01:48,689 --> 00:01:50,230 Ve biz ona bakmak ve onu inceleyebilirsiniz. 38 00:01:50,230 --> 00:01:53,670 Ve böylece programı ayarlanmış olması Bazı kalıcı veri oluşturduk, 39 00:01:53,670 --> 00:01:57,390 Veri programı sonrası mevcut çalışması tamamlanmıştır. 40 00:01:57,390 --> 00:02:02,320 >> Şimdi işe bu fonksiyonların hepsi dosyaları oluşturma ve idare ile 41 00:02:02,320 --> 00:02:04,940 çeşitli şekillerde bunları Standart io.h yaşamak, 42 00:02:04,940 --> 00:02:08,210 hangi bir başlık dosyası olduğunu büyük olasılıkla kiloluk oldum 43 00:02:08,210 --> 00:02:10,910 güzel üstündeki dahil programların hemen bütün 44 00:02:10,910 --> 00:02:14,130 o biri içerdiğinden Bizim için en kullanışlı fonksiyonlar, 45 00:02:14,130 --> 00:02:16,130 Ayrıca sağlayan printf, Standart io.h yaşıyor 46 00:02:16,130 --> 00:02:20,400 Yani dahil sterlin gerekmez herhangi bir ek dosya muhtemelen 47 00:02:20,400 --> 00:02:23,540 sırayla dosya işaretçisi ile çalışmak. 48 00:02:23,540 --> 00:02:29,980 >> Şimdi her dosya gösterici işlevi, ya her bir dosya G / Ç, giriş çıkış 49 00:02:29,980 --> 00:02:33,310 fonksiyonu, biri olarak kabul onun parametreleri veya girişlerin 50 00:02:33,310 --> 00:02:35,822 dışındaki dosya pointer-- biri için, Fopen, burada 51 00:02:35,822 --> 00:02:38,280 Dosyayı almak için kullandığınız ne ilk etapta işaretçi. 52 00:02:38,280 --> 00:02:41,010 Ama açtın sonra dosya ve dosya işaretçisi almak, 53 00:02:41,010 --> 00:02:43,510 Eğer bunları iletebilirsiniz çeşitli işlevlere argümanlar 54 00:02:43,510 --> 00:02:46,720 Biz hakkında konuşmak için gidiyoruz Bugün, hem de birçok 55 00:02:46,720 --> 00:02:48,520 böylece dosyaları ile çalışabilirsiniz. 56 00:02:48,520 --> 00:02:50,980 >> Yani altı oldukça vardır ortak temel olanları 57 00:02:50,980 --> 00:02:52,870 bugün hakkında konuşmak için gidiyoruz. 58 00:02:52,870 --> 00:02:57,160 fopen ve onun arkadaşı Fonksiyon fclose, fgetc 59 00:02:57,160 --> 00:03:02,670 ve onun arkadaşı fonksiyonu fputc, ve fread ve onun arkadaşı fonksiyonu, 60 00:03:02,670 --> 00:03:03,820 fwrite. 61 00:03:03,820 --> 00:03:05,180 Yani sağ içine alır. 62 00:03:05,180 --> 00:03:07,050 >> fopen-- ne işe yarar? 63 00:03:07,050 --> 00:03:10,050 Evet, bu bir dosyayı açar ve Bunun size bir dosya işaretçisi verir, 64 00:03:10,050 --> 00:03:14,000 böylece o kullanabileceğiniz argüman olarak işaretçisi dosya 65 00:03:14,000 --> 00:03:16,730 diğer dosya I / O fonksiyonları herhangi. 66 00:03:16,730 --> 00:03:19,100 En önemli şey fopen ile hatırlamak 67 00:03:19,100 --> 00:03:24,222 Açtığınız olduğunu sonra dosya ya da burada gibi bir çağrı yaptı, 68 00:03:24,222 --> 00:03:26,930 emin olmak için kontrol etmeniz gerekir Bu size geri aldım işaretçi 69 00:03:26,930 --> 00:03:28,320 null eşit değildir. 70 00:03:28,320 --> 00:03:31,320 Videoyu izledim değilseniz işaretçileri, bu mantıklı olmayabilir. 71 00:03:31,320 --> 00:03:35,639 Ama denemek ve eğer inceleyebilirsiniz bir boş gösterici hatırlama, 72 00:03:35,639 --> 00:03:38,180 program muhtemelen yaşayacaktır Bir segmentasyon [duyulamaz]. 73 00:03:38,180 --> 00:03:40,540 Biz emin olmak istiyorum biz meşru bir işaretçi geri aldım. 74 00:03:40,540 --> 00:03:43,665 Zamanın büyük çoğunluğu biz olacak Geri meşru işaretçi aldık 75 00:03:43,665 --> 00:03:45,280 ve bu bir sorun olmayacak. 76 00:03:45,280 --> 00:03:46,760 >> Peki nasıl bir çağrı fopen yapabilirim? 77 00:03:46,760 --> 00:03:48,051 Bunun gibi hemen hemen görünüyor. 78 00:03:48,051 --> 00:03:52,690 Jenerik olmak ptr ptr-- Dosya yıldızı pointer-- Fopen dosya adını 79 00:03:52,690 --> 00:03:57,300 ve biz iki şeyi bir dosya adı geçmesi ve bir işlem biz üstlenmek istiyoruz. 80 00:03:57,300 --> 00:04:01,690 Yani biz benzeyen bir çağrı olabilir bu-- dosya yıldız ptr 1 fopen eşittir 81 00:04:01,690 --> 00:04:04,040 file1.txt. 82 00:04:04,040 --> 00:04:07,020 Ve ben seçtiğim operasyon r. 83 00:04:07,020 --> 00:04:08,639 >> Peki ne r burada olduğunu düşünüyorsunuz? 84 00:04:08,639 --> 00:04:11,180 Şeyler çeşitleri nelerdir biz dosyaları yapmak mümkün olabilir? 85 00:04:11,180 --> 00:04:13,760 86 00:04:13,760 --> 00:04:17,500 Yani r operasyon olduğunu biz Biz bir dosyayı okumak istediğinizde seçin. 87 00:04:17,500 --> 00:04:20,260 Yani temelde ne zaman olur Böyle bir çağrı yapmak 88 00:04:20,260 --> 00:04:25,440 kendimize bir dosya işaretçisi getting biz sonra bilgiyi okuyabilir böyle 89 00:04:25,440 --> 00:04:27,770 file1.txt dan. 90 00:04:27,770 --> 00:04:34,190 >> Benzer şekilde, dosya 2.txt açabilir ptr2 yazma ve böylece biz geçebilir, 91 00:04:34,190 --> 00:04:38,210 Burada oluşturduğunuz dosya gösterici, Herhangi bir işleve argüman olarak o 92 00:04:38,210 --> 00:04:40,080 bir dosyaya bilgileri yazar. 93 00:04:40,080 --> 00:04:43,767 Ve yazmaya benzer, orada Ayrıca seçeneği, eklenecek. 94 00:04:43,767 --> 00:04:45,600 Aradaki fark yazma ve ekleme 95 00:04:45,600 --> 00:04:50,920 olmak, bir dosyaya yazarken o, yazılı için fopen çağrısı yaparsanız 96 00:04:50,920 --> 00:04:54,761 ve bu dosya zaten bu, mevcut tüm dosya üzerine gidiyor. 97 00:04:54,761 --> 00:04:56,510 Başlamak için gidiyor başında, 98 00:04:56,510 --> 00:04:58,820 tüm bilgileri silerek zaten var. 99 00:04:58,820 --> 00:05:02,210 >> Eğer ekleme için açarsanız Oysa, bu dosyanın sonuna gidecek 100 00:05:02,210 --> 00:05:04,340 Zaten metin varsa o ya da bilgi, 101 00:05:04,340 --> 00:05:06,040 ve bundan sonra başlayacak Oradan yazma. 102 00:05:06,040 --> 00:05:08,570 Yani herhangi kaybetmezsiniz Daha önce yaptığım bilgiler. 103 00:05:08,570 --> 00:05:12,110 Yazmak ya da eklemek istiyorum olsun çeşit duruma bağlıdır. 104 00:05:12,110 --> 00:05:16,840 Ama muhtemelen ne bileceksiniz zamanı geldiğinde doğru bir işlemdir. 105 00:05:16,840 --> 00:05:18,020 Yani fopen var. 106 00:05:18,020 --> 00:05:18,930 >> Ne fclose dersiniz? 107 00:05:18,930 --> 00:05:21,600 Eh, oldukça basit, fclose Sadece dosya işaretçisi kabul eder. 108 00:05:21,600 --> 00:05:24,000 Ve Tahmin edebileceğiniz gibi, o dosyayı kapatır. 109 00:05:24,000 --> 00:05:29,270 Biz dosyayı kapattıktan sonra, biz yapamam herhangi bir dosya daha I / O fonksiyonları gerçekleştirmek 110 00:05:29,270 --> 00:05:31,420 okuma ya da dosya üzerinde, yazma. 111 00:05:31,420 --> 00:05:36,444 Biz yeniden açmak zorunda için başka bir zaman dosya 112 00:05:36,444 --> 00:05:38,610 ile çalışmaya devam etmek I / O fonksiyonları kullanarak. 113 00:05:38,610 --> 00:05:41,520 Biz bitti So fclose araçlar Bu dosyayla çalışıyor. 114 00:05:41,520 --> 00:05:44,690 Ve biz geçmek için ihtiyaç vardır Bir dosya işaretçisi adı. 115 00:05:44,690 --> 00:05:50,010 Önce bir çift kayar üzerinde Yani biz okumak için fopened dosya 1 nokta metni 116 00:05:50,010 --> 00:05:52,854 ve biz atanmış ptr1 işaretçiyi dosya. 117 00:05:52,854 --> 00:05:55,020 Şimdi biz olduğuna karar verdim Bu dosyadan okuma yapılır. 118 00:05:55,020 --> 00:05:56,561 Biz onunla bir daha yapmak gerekmez. 119 00:05:56,561 --> 00:05:58,890 Biz sadece fclose ptr1 yapabilirsiniz. 120 00:05:58,890 --> 00:06:01,950 Ve aynı şekilde, biz-ebil diğerlerini fclose. 121 00:06:01,950 --> 00:06:02,450 Pekala. 122 00:06:02,450 --> 00:06:03,700 Böylece açılış ve kapanış ediyor. 123 00:06:03,700 --> 00:06:05,780 Bu iki temel işlemleri başlıyor. 124 00:06:05,780 --> 00:06:08,050 >> Şimdi biz aslında istiyoruz bazı ilginç şeyler, 125 00:06:08,050 --> 00:06:11,940 ve ilk fonksiyon o yaparız Bu fgetc-- olduğunu yapacağız bakın 126 00:06:11,940 --> 00:06:14,110 Bir karakteri olsun dosya. 127 00:06:14,110 --> 00:06:17,350 Bu genellikle fgetc ne çevirmek istiyorum. 128 00:06:17,350 --> 00:06:20,190 Hayatta Onun hedefi olduğunu Bir sonraki karakteri okumak, 129 00:06:20,190 --> 00:06:22,079 ya bu senin çok ise fgetc ilk çağrı 130 00:06:22,079 --> 00:06:23,870 Belirli bir dosya için, İlk karakter. 131 00:06:23,870 --> 00:06:26,210 Ama ondan sonra, Eğer, bir sonraki almak 132 00:06:26,210 --> 00:06:31,500 o dosyanın bir sonraki karakteri, Bir karakter değişkeni ve depolar. 133 00:06:31,500 --> 00:06:34,490 Burada yaptığım gibi, karakter ch, fgetc eşittir 134 00:06:34,490 --> 00:06:36,389 Bir dosya işaretçisi adına geçmektedir. 135 00:06:36,389 --> 00:06:38,180 Yine, çok var: Hatırlanması gereken Burada önemli 136 00:06:38,180 --> 00:06:41,430 sipariş var olduğunu Bu işlem başarılı, 137 00:06:41,430 --> 00:06:45,690 Dosya işaretçisi kendisi olmalı okumak için açılmış. 138 00:06:45,690 --> 00:06:50,589 Bir dosyadan bir karakter okuyamaz Biz yazmak için açılmış işaretçi. 139 00:06:50,589 --> 00:06:52,630 Yani biri fopen sınırlamaları, değil mi? 140 00:06:52,630 --> 00:06:55,470 Biz kısıtlamak zorunda kendimizi sadece performans için 141 00:06:55,470 --> 00:06:57,710 Bir dosya işaretçisi ile bir işlem. 142 00:06:57,710 --> 00:07:00,220 Biz okumak isteseydim ve Aynı dosyadan yazma, 143 00:07:00,220 --> 00:07:03,840 açık iki ayrı olurdu Aynı file-- dosya işaretçileri 144 00:07:03,840 --> 00:07:05,670 okuma için bir yazılı için. 145 00:07:05,670 --> 00:07:08,400 >> Yani yine tek nedeni Ben şimdi bu konuyu 146 00:07:08,400 --> 00:07:11,920 Biz bir çağrı yapmak için gidiyoruz çünkü eğer fgetc için, bu dosya işaretçisi olmalı 147 00:07:11,920 --> 00:07:14,172 okumak için açılmış. 148 00:07:14,172 --> 00:07:15,880 Ve sonra oldukça basit, tüm yapmamız gereken 149 00:07:15,880 --> 00:07:17,546 Dosya işaretçisi adına geçmektir. 150 00:07:17,546 --> 00:07:21,060 Yani Char ch fgetc ptr1 eşittir. 151 00:07:21,060 --> 00:07:23,200 >> Bu bizi almak için gidiyor Bir sonraki character-- 152 00:07:23,200 --> 00:07:25,575 veya yine bu ilk ise Bu aramayı yaptık zaman, 153 00:07:25,575 --> 00:07:29,750 ilk character-- ne olursa olsun Dosya ptr1 tarafından işaret edilmektedir. 154 00:07:29,750 --> 00:07:32,210 Bu dosya 1 nokta metni olduğunu hatırlayın. 155 00:07:32,210 --> 00:07:36,490 O ilk karakterini alırsınız ve biz değişken ch saklayın olacak. 156 00:07:36,490 --> 00:07:37,941 Oldukça basit. 157 00:07:37,941 --> 00:07:40,190 Yani biz sadece üç baktım fonksiyonları ve biz zaten 158 00:07:40,190 --> 00:07:43,070 Oldukça düzgün bir şey yapabilirsiniz. 159 00:07:43,070 --> 00:07:46,320 >> Bu yeteneği almak Yani eğer Bir karakteri alma 160 00:07:46,320 --> 00:07:48,943 ve biz döngü böylece dökersin-- biz karakterleri almaya devam 161 00:07:48,943 --> 00:07:51,390 Bir dosyadan üzerinde ve üzerinde ve çakışık şimdi 162 00:07:51,390 --> 00:07:54,500 her okuyabilirsiniz Bir dosyanın karakter. 163 00:07:54,500 --> 00:07:58,670 Ve biz her karakter yazdırarak Biz okumak hemen sonra, 164 00:07:58,670 --> 00:08:01,960 Şimdi bir dosyadan okudum ve ekrana içeriğini basılmış. 165 00:08:01,960 --> 00:08:05,610 Biz etkin bir şekilde birleştirilir ettik Ekranda bu dosya. 166 00:08:05,610 --> 00:08:09,670 Ve bu ne Linux komut kedi yok. 167 00:08:09,670 --> 00:08:13,250 >> Dosya adında kedi yazarsanız, onu tüm içeriğini yazdırmak olacak 168 00:08:13,250 --> 00:08:15,160 Terminal penceresinde dosyanın. 169 00:08:15,160 --> 00:08:19,010 Ve işte bu küçük döngü, kod sadece üç satır, 170 00:08:19,010 --> 00:08:23,270 ama etkin bir şekilde çoğaltır Linux komut kedi. 171 00:08:23,270 --> 00:08:25,210 Yani bu sözdizimi olabilir biraz garip görünüyorsun 172 00:08:25,210 --> 00:08:26,670 ama burada Buradaki buydu. 173 00:08:26,670 --> 00:08:31,460 Ch fgetc eşittir birlikte, ptr değildir bir bütün lokma EOF-- eşit 174 00:08:31,460 --> 00:08:34,669 ama o da sadece kırmasına izin bu yüzden sözdizimi açıktır. 175 00:08:34,669 --> 00:08:37,169 Bunu konsolide ettik alan uğruna, 176 00:08:37,169 --> 00:08:39,049 Biraz olsa sözdizimsel zor. 177 00:08:39,049 --> 00:08:41,194 >> Yani yeşil sağ bu bölümü şimdi, ne yapıyor? 178 00:08:41,194 --> 00:08:42,860 Peki, bu sadece bizim fgetc çağrısı, değil mi? 179 00:08:42,860 --> 00:08:44,530 Biz daha önce gördüm. 180 00:08:44,530 --> 00:08:49,500 O birini elde ediyor Dosyadan bir karakter. 181 00:08:49,500 --> 00:08:53,220 Sonra biz karşılaştırmak EOF karşı karakter. 182 00:08:53,220 --> 00:08:57,470 EOF var özel bir değerdir Standart io.h, tanımlı hangi 183 00:08:57,470 --> 00:08:59,390 Dosya karakteri sonudur. 184 00:08:59,390 --> 00:09:03,450 Yani temelde ne olacak neler Bu döngü bir karakter okuyacak olan, 185 00:09:03,450 --> 00:09:07,445 , dosya sonuna kadar karşılaştırın Dosya karakterinin sonu. 186 00:09:07,445 --> 00:09:10,070 Onlar uyuşmuyorsa, bu yüzden biz değil Dosyanın sonuna ulaştınız 187 00:09:10,070 --> 00:09:11,490 Biz o karakteri basalım. 188 00:09:11,490 --> 00:09:13,740 Sonra geri gidersiniz Yine döngünün başında. 189 00:09:13,740 --> 00:09:18,310 Bir karakteri alırsınız, çek EOF karşı, böylece çıktısını ve 190 00:09:18,310 --> 00:09:21,094 ve benzerleri ve bu yüzden, bu şekilde döngü 191 00:09:21,094 --> 00:09:22,760 Biz dosyanın sonuna ulaşana kadar. 192 00:09:22,760 --> 00:09:24,593 Ve sonra o noktaya göre, baskılı olacak 193 00:09:24,593 --> 00:09:26,210 dosyanın tüm içeriğini dışında. 194 00:09:26,210 --> 00:09:29,450 Yani yine, biz sadece gördüm fopen, fclose ve fgetc 195 00:09:29,450 --> 00:09:34,950 ve zaten biz çoğaltabilirsiniz Bir Linux terminal komutu. 196 00:09:34,950 --> 00:09:38,850 >> Başında Dediğim gibi, Biz fgetc ve fputc vardı 197 00:09:38,850 --> 00:09:41,860 ve fputc arkadaşı oldu fgetc işlevi. 198 00:09:41,860 --> 00:09:44,880 Ve böylece, gibi, hayal olabilir bu yazı eşdeğerdir. 199 00:09:44,880 --> 00:09:49,440 Bu bize yazmak için izin bir dosyaya tek bir karakter. 200 00:09:49,440 --> 00:09:53,290 >> Yine, ihtar olmak, sadece o fgetc oldu gibi dosya 201 00:09:53,290 --> 00:09:56,660 Biz olmalı için yazıyoruz o olmuştur yazma veya ekleme için açıldı. 202 00:09:56,660 --> 00:10:00,820 Biz denemek ve bir dosya üzerinde fputc kullanıyorsanız Biz okumak için açtın ki 203 00:10:00,820 --> 00:10:02,760 Biz acı gidiyoruz Bir hata biraz. 204 00:10:02,760 --> 00:10:04,440 Ama çağrı oldukça basittir. 205 00:10:04,440 --> 00:10:08,000 fputc sermayesi A ptr2 tüm Bunu gidiyor bu kadar olduğunu 206 00:10:08,000 --> 00:10:12,040 Mektup yazmak olacak Bir dosya içine 2 nokta haline 207 00:10:12,040 --> 00:10:14,760 adıydı metin, Biz açtı ve atanmış olduğunu dosya 208 00:10:14,760 --> 00:10:17,280 işaretçi ptr2 için. 209 00:10:17,280 --> 00:10:20,430 Yani biz bir yazmak için gidiyoruz Sermaye A 2 nokta metni dosya. 210 00:10:20,430 --> 00:10:24,592 Ve biz bir ünlem yazacağım 3 nokta dosyaya gelin 211 00:10:24,592 --> 00:10:27,330 ptr3 tarafından işaret edilen metin. 212 00:10:27,330 --> 00:10:29,730 Yani yine, burada oldukça basit. 213 00:10:29,730 --> 00:10:32,727 >> Ama şimdi başka bir şey yapabilirim. 214 00:10:32,727 --> 00:10:34,560 Bu örnek var biz sadece gittiğini 215 00:10:34,560 --> 00:10:38,950 kedi çoğaltmak mümkün olmakla ilgili Linux komut, yazdırır biri 216 00:10:38,950 --> 00:10:40,500 ekrana. 217 00:10:40,500 --> 00:10:43,510 Eh, şimdi biz bir yeteneğe sahip olduğunu dosyalarından karakterleri okumak için 218 00:10:43,510 --> 00:10:46,590 ve, dosyalara karakterleri yazma neden sadece yerine geçmez 219 00:10:46,590 --> 00:10:50,720 fputc çağrısı ile printf arayın. 220 00:10:50,720 --> 00:10:54,090 >> Ve şimdi biz cp çoğaltılamaz ettik, Bir çok temel Linux komut 221 00:10:54,090 --> 00:10:59,100 Biz yol uzun konuştuk o önce Linux videoyu komutları. 222 00:10:59,100 --> 00:11:01,070 Biz etkin bir şekilde var Burada o çoğaltılamaz. 223 00:11:01,070 --> 00:11:04,790 Biz bir karakteri okuyorsanız ve sonra konum Başka bir dosyaya bu karakteri yazarken. 224 00:11:04,790 --> 00:11:07,660 Bir dosyadan okuma, yazma ve üzerinde başka, için 225 00:11:07,660 --> 00:11:11,350 Tekrar tekrar biz EOF girene kadar. 226 00:11:11,350 --> 00:11:14,250 Biz sonuna kadar var dosya biz kopyalamak için çalışıyoruz. 227 00:11:14,250 --> 00:11:18,500 Ve biz tüm yazılı olacak karakter Biz dosyaya ihtiyacımız 228 00:11:18,500 --> 00:11:19,500 biz yazıyoruz. 229 00:11:19,500 --> 00:11:24,270 Yani bu cp, Linux kopyalama komutu olduğunu. 230 00:11:24,270 --> 00:11:26,550 >> Başında Bu video ben ihtar vardı 231 00:11:26,550 --> 00:11:29,840 Biz konuşmak olacağını işaretçileri hakkında biraz. 232 00:11:29,840 --> 00:11:32,480 Biz nereli İşte spesifik olarak işaretçileri hakkında konuşacağım 233 00:11:32,480 --> 00:11:34,800 ek işaretçileri dosya. 234 00:11:34,800 --> 00:11:37,870 Yani bu fonksiyon korkutucu görünüyor. 235 00:11:37,870 --> 00:11:39,120 Birkaç parametre var. 236 00:11:39,120 --> 00:11:40,430 Burada devam eden bir sürü var. 237 00:11:40,430 --> 00:11:42,760 Farklı bir yeri var renkler ve metinler. 238 00:11:42,760 --> 00:11:47,100 Ama gerçekten, bu sadece fgetc jenerik versiyonu 239 00:11:47,100 --> 00:11:50,110 Bu bize herhangi almayı sağlar bilgi miktarı. 240 00:11:50,110 --> 00:11:53,560 Biz eğer biraz verimsiz olabilir Bir seferde karakterler getting, 241 00:11:53,560 --> 00:11:55,770 dosyanın yineleme Bir seferde bir karakter. 242 00:11:55,770 --> 00:12:00,230 Bunu elde etmek güzel olmaz mıydı Her seferinde bir zaman ya da 500 ° C'de 100? 243 00:12:00,230 --> 00:12:03,250 >> Eh, fread ve onun arkadaşı fonksiyonu fwrite, biz hangi hakkında konuşacağım 244 00:12:03,250 --> 00:12:05,490 İkinci olarak, bize sadece bunu sağlar. 245 00:12:05,490 --> 00:12:08,480 Biz keyfi bir miktar okuyabilirsiniz Bir dosyadan bilgi 246 00:12:08,480 --> 00:12:10,290 ve biz bir yere geçici olarak saklayın. 247 00:12:10,290 --> 00:12:12,980 Yerine sadece edememek Tek bir değişkene sığacak, 248 00:12:12,980 --> 00:12:15,790 Biz bir dizide depolamak gerekebilir. 249 00:12:15,790 --> 00:12:19,980 Ve böylece, biz dört geçmek argümanlar bir işaretçi fread-- için 250 00:12:19,980 --> 00:12:23,940 Biz konum konuma bilgileri saklamak için gidiyoruz, 251 00:12:23,940 --> 00:12:29,180 nasıl bilgi her birim büyük olacak, bilgi kaç adet 252 00:12:29,180 --> 00:12:35,192 Biz kazanmak istiyoruz ve gelen hangi dosya biz onları almak istiyorum. 253 00:12:35,192 --> 00:12:37,150 Muhtemelen en iyi resimli Burada bir örnekle. 254 00:12:37,150 --> 00:12:41,640 Yani biz ilan diyelim 10 tamsayılar dizisi. 255 00:12:41,640 --> 00:12:45,080 Biz sadece ilan ettik keyfi yığını arr 10 int. 256 00:12:45,080 --> 00:12:46,970 Yani oldukça basittir. 257 00:12:46,970 --> 00:12:51,970 Şimdi ne olsa yapıyoruz olduğunu frecall biz int boyutu okuyorsanız olduğunu 258 00:12:51,970 --> 00:12:54,180 Zaman bilgilerin 10 bayt. 259 00:12:54,180 --> 00:12:59,040 Int varlığın büyüklüğü işte dört-- c bir tamsayı boyutu. 260 00:12:59,040 --> 00:13:02,790 >> Peki ne yapıyoruz biz okuyorsanız olduğunu Bilgi değerinde 40 bayt 261 00:13:02,790 --> 00:13:05,850 Dosyadan ptr tarafından işaret etti. 262 00:13:05,850 --> 00:13:08,600 Ve biz o saklıyoruz 40 bayt yerde 263 00:13:08,600 --> 00:13:12,080 Biz kenara nerede Bellek değerinde 40 bayt. 264 00:13:12,080 --> 00:13:15,970 Neyse ki, biz zaten tarafından yaptık Bu dizi tam orada, arr ilan. 265 00:13:15,970 --> 00:13:19,770 Bu holdingin yeteneğine sahiptir 10 dört bayt birimleri. 266 00:13:19,770 --> 00:13:22,860 Toplam Yani, bu 40 tutabilir bayt bilgi değerinde. 267 00:13:22,860 --> 00:13:26,540 Ve şimdi 40 bayt okuma dosyadan bilgi, 268 00:13:26,540 --> 00:13:30,330 ve biz arr saklayarak ediyoruz. 269 00:13:30,330 --> 00:13:35,470 >> Işaretçileri video hatırlayın Böyle arr gibi bir dizi adı, 270 00:13:35,470 --> 00:13:38,370 Gerçekten sadece bir işaretçi ilk elemana. 271 00:13:38,370 --> 00:13:43,680 Yani biz orada arr geçerken, biz bir işaretçi geçen, aslında, bulunmaktadır. 272 00:13:43,680 --> 00:13:46,120 >> Aynı şekilde biz bu-- yapabiliriz biz mutlaka yok 273 00:13:46,120 --> 00:13:51,200 yığınında bizim tampon kaydetmeniz gerekir. 274 00:13:51,200 --> 00:13:54,990 Biz de dinamik tahsis olabilir Bir malloc kullanarak, böyle tampon. 275 00:13:54,990 --> 00:13:57,340 Ne zaman, unutmayın dinamik bellek ayrılamadı, 276 00:13:57,340 --> 00:14:00,550 biz kaydetmeden ediyoruz Yığın, değil yığın. 277 00:14:00,550 --> 00:14:02,110 Ama yine de bir tampon bulunuyor. 278 00:14:02,110 --> 00:14:06,810 >> Yine de, bu durumda, bir bilgi 640 bayt tutan 279 00:14:06,810 --> 00:14:09,230 Çift sekiz bayt kadar sürer, çünkü. 280 00:14:09,230 --> 00:14:11,570 Ve biz bunların 80 için soruyorsun. 281 00:14:11,570 --> 00:14:13,770 Biz alana sahip istiyoruz 80 çift tutun. 282 00:14:13,770 --> 00:14:17,210 Yani 80 kere 8 640 byte bilgidir. 283 00:14:17,210 --> 00:14:21,880 Ve fread o çağrı bilgi 640 bayt toplanması 284 00:14:21,880 --> 00:14:27,770 dosyasıyla işaret den ptr ve arr2 şimdi saklayarak. 285 00:14:27,770 --> 00:14:32,770 >> Şimdi de fread tedavi edebilir Sadece fgetc bir çağrı gibi. 286 00:14:32,770 --> 00:14:37,140 Bu durumda, sadece çalışıyoruz Dosyadan bir karakter olsun. 287 00:14:37,140 --> 00:14:40,070 Ve biz bir ihtiyacımız yok Dizi bir karakter tutun. 288 00:14:40,070 --> 00:14:43,170 Biz sadece saklayabileceğiniz Bir karakter değişkeni. 289 00:14:43,170 --> 00:14:46,390 >> Catch olsa, yani biz sadece bir değişken varsa, 290 00:14:46,390 --> 00:14:50,290 Biz geçmesi gerekiyor Bu değişkenin adresi 291 00:14:50,290 --> 00:14:52,550 hatırlama çünkü fread ilk argüman 292 00:14:52,550 --> 00:14:59,210 konumu ve bellek için bir gösterici Biz bilgiyi depolamak istediğiniz. 293 00:14:59,210 --> 00:15:01,550 Yine, bir ismi Dizi göstericisidir. 294 00:15:01,550 --> 00:15:04,200 Yani biz işareti dizi yapmak gerekmez. 295 00:15:04,200 --> 00:15:07,270 Ama c c karakteri Burada, bir dizi değil. 296 00:15:07,270 --> 00:15:08,390 Bu sadece bir değişken. 297 00:15:08,390 --> 00:15:11,840 Ve böylece biz geçmesi gerekiyor işareti c belirtmek için 298 00:15:11,840 --> 00:15:15,350 biz istiyoruz adres olduğunu Bu bilgi bir bayt saklamak, 299 00:15:15,350 --> 00:15:20,479 Bu bir karakter olduğunu Biz ptr gelen topluyorsunuz. 300 00:15:20,479 --> 00:15:22,270 Ben üzerinden gidersiniz Fwrite-- Bu biraz daha 301 00:15:22,270 --> 00:15:25,440 quickly-- oldukça fazla fread tam eşdeğeri 302 00:15:25,440 --> 00:15:27,720 yazılı içindir hariç yerine okuma, sadece 303 00:15:27,720 --> 00:15:31,610 other-- gibi açık yaşadım ve yakın bir karakter olsun, 304 00:15:31,610 --> 00:15:32,530 Bir karakteri yazın. 305 00:15:32,530 --> 00:15:35,040 Şimdi keyfi almak var bilgi miktarı, 306 00:15:35,040 --> 00:15:37,170 bilgi doğru keyfi miktarda. 307 00:15:37,170 --> 00:15:39,790 Yani daha önce olduğu gibi, biz 10 tamsayılar bir dizi var 308 00:15:39,790 --> 00:15:43,210 nerede zaten bilgi, belki saklandı. 309 00:15:43,210 --> 00:15:46,580 >> Muhtemelen kod bazı satırları oldu bu iki arasında gitmeli 310 00:15:46,580 --> 00:15:49,990 ben arr doldurmak nerede Anlamlı bir şey. 311 00:15:49,990 --> 00:15:51,880 Ben 10 farklı tamsayılar ile doldurun. 312 00:15:51,880 --> 00:15:54,920 Ve bunun yerine, ne olduğumu yapıyor arr gelen yazıyor 313 00:15:54,920 --> 00:15:58,600 ve arr bilgi toplama. 314 00:15:58,600 --> 00:16:02,390 Ve ben bu bilgiyi alıyorum ve dosya içine koyarak. 315 00:16:02,390 --> 00:16:05,410 >> Bunun yerine ondan olma tampon dosya, 316 00:16:05,410 --> 00:16:08,790 Biz şimdi gidiyoruz dosyasına tamponu. 317 00:16:08,790 --> 00:16:10,580 Yani tam tersi var. 318 00:16:10,580 --> 00:16:16,680 Sadece eskisi gibi Yani yine, biz Ayrıca bellek yığın yığın var 319 00:16:16,680 --> 00:16:19,600 Biz dinamik ettik o tahsis ve okumak 320 00:16:19,600 --> 00:16:21,570 ve dosyaya yazarlar. 321 00:16:21,570 --> 00:16:24,900 >> Ve biz de tek bir değişkene sahip bir bayt tutabilen 322 00:16:24,900 --> 00:16:27,200 Böyle bir karakter olarak bilgilerin. 323 00:16:27,200 --> 00:16:29,830 Fakat yine de, biz geçmesi gerekiyor Bu değişkenin adresi 324 00:16:29,830 --> 00:16:31,840 biz ondan okumak istediğinizde. 325 00:16:31,840 --> 00:16:35,280 Yani biz bilgiyi yazabilirsiniz Biz o adreste bulabilirsiniz 326 00:16:35,280 --> 00:16:39,050 Dosya işaretçisi, ptr. 327 00:16:39,050 --> 00:16:41,630 >> Başka bir sürü var Büyük bir dosya I / O fonksiyonları 328 00:16:41,630 --> 00:16:44,650 bunun yanı sıra çeşitli şeyler yapmak olanlar bugün konuştuk. 329 00:16:44,650 --> 00:16:46,450 Olanlar bir çift işinize yarayabilecek 330 00:16:46,450 --> 00:16:50,840 fgets ve fputs olan, bu eşdeğerdir 331 00:16:50,840 --> 00:16:56,190 fgetc ve fputc göre değil de okuma Bir dosyadan tek bir dize. 332 00:16:56,190 --> 00:16:59,020 Bunun yerine tek bir karakteri, bir bütün dize okuyacaktır. 333 00:16:59,020 --> 00:17:02,940 temelde veriyor fprintf, Eğer dosya yazmak için printf kullanmak için. 334 00:17:02,940 --> 00:17:05,619 Yapabileceğiniz Yani tıpkı kullanarak değişken değiştirme 335 00:17:05,619 --> 00:17:09,900 tutucuları yüzde i ve printf ile yüzde d, ve bu yüzden, 336 00:17:09,900 --> 00:17:14,690 Eğer benzer alabilir printf dize ve baskı şey 337 00:17:14,690 --> 00:17:16,800 bir dosyaya böyle. 338 00:17:16,800 --> 00:17:20,720 >> fseek-- DVD oynatıcı varsa Ben genellikle burada-- kullanmak benzetme 339 00:17:20,720 --> 00:17:23,109 çeşit kullanmak gibidir senin geri sarma ve hızlı ileri 340 00:17:23,109 --> 00:17:25,819 düğmeleri film dolaşmak için. 341 00:17:25,819 --> 00:17:28,369 Benzer şekilde, dosyanın etrafında hareket edebilirsiniz. 342 00:17:28,369 --> 00:17:30,250 Içeride şeylerden biri bu dosya yapısı 343 00:17:30,250 --> 00:17:34,270 Eğer bir göstergesi o c yaratır nerede sen dosyasında var. 344 00:17:34,270 --> 00:17:36,420 Çok altında mısınız bayt sıfır, başlangıç? 345 00:17:36,420 --> 00:17:39,290 Eğer bayt 100 Are, Bayt 1000, ve böylece? 346 00:17:39,290 --> 00:17:44,340 Sen keyfi hareket etmek fseek kullanabilirsiniz ileri ya da geri o gösterge. 347 00:17:44,340 --> 00:17:46,744 >> Ve yine, ftell DVD oynatıcı benzeri, 348 00:17:46,744 --> 00:17:49,660 söyler küçük bir saat gibi Kaç dakika ve saniye sizi 349 00:17:49,660 --> 00:17:52,480 Belirli bir filme vardır. 350 00:17:52,480 --> 00:17:56,990 Benzer şekilde, ftell nasıl söyler Birçok bayt dosyaya içine. 351 00:17:56,990 --> 00:18:00,210 feof farklı versiyonu size ettik olmadığını tespit 352 00:18:00,210 --> 00:18:01,700 dosyanın sonuna ulaştı. 353 00:18:01,700 --> 00:18:03,600 Ve fError bir fonksiyonudur Eğer kullanabilirsiniz 354 00:18:03,600 --> 00:18:06,959 bir şey olup olmadığını tespit etmek için Bir dosya ile yanlış çalışma gitmiş. 355 00:18:06,959 --> 00:18:08,750 Yine, bu sadece bir yüzeyi çizilmeye. 356 00:18:08,750 --> 00:18:12,730 Bol daha fazla dosya I / O hâlâ var Standart io.h işlevleri 357 00:18:12,730 --> 00:18:16,620 Ancak bu muhtemelen size alacaksınız Dosya işaretçileri ile çalışmaya başladı. 358 00:18:16,620 --> 00:18:17,640 Ben Doug Lloyd değilim. 359 00:18:17,640 --> 00:18:19,750 Bu CS50 olduğunu. 360 00:18:19,750 --> 00:18:21,669