Merhaba ve tekrar hoş geldiniz.
Yeni bir bölümdeyiz.
Bu bölüm tamamen dosya girişi ve çıkışı yazma ve dosyalardan okuma ile ilgilidir.
Metin dosyalarına odaklanacağız, ancak ikili dosyalar hakkında da biraz konuşacağız.
Bu derste sadece genel bir bakış sunmak, dosyanın ne olduğunu anlatmak ve kalıcı verileri depolamak için nasıl
iyi bir kullanım olduğunu anlatmak istiyorum.
Yani bu noktaya kadar, programımızın eriştiği tüm veriler bellek üzerindendir.
Değişkenler, yapılar ya da her ne ise bu kavrama aşinayız.
Programınızın bellekte kullandığı tüm verileri silin.
Hafızada saklanmasının nedeni, hafızaların gerçekten hızlı olması ve hesaplamalar yapmak için
hızlı bir şekilde erişebilmenizdir.
Getirme, yürütme döngüsü gibi şeyler yapıyorsunuz.
Dolayısıyla kapsamı sınırlıdır, ancak uygulamalarımızın kapsamı ve çeşitliliği de sınırlıdır, çünkü
yalnızca bellek kullanıyorsa, biraz sınırlı olacaktır.
Program ortadan kalktığında hafızanın da ortadan kalktığını biliyoruz ve bu çok sınırlayıcı olabilir.
Tüm ciddi iş uygulamaları ana belleğe sığmayacak kadar çok veriye ihtiyaç duyar.
Ana bellek de çok küçüktür, hemen yukarıdadır.
Ve bugünlerde 1630 ila 32 gigabayt arasında çok fazla bellek alabilirsiniz.
Ancak geçmişte ve özellikle gömülü cihazlarda çok fazla RAM'e sahip değilsiniz ve sonuç olarak uygulamalarınız
alan ve boyut nedeniyle çok sınırlı.
Gerçekten sadece değişkenleri ve bunun gibi şeyleri ana bellekte saklamak istersiniz.
Çünkü program ortadan kalktığında ana bellek de ortadan kalkar.
Yeniden başlatmalar arasında kalıcı olarak depolanan herhangi bir veriye sahip olamazsınız.
Yani her şey, bu büyük programların kalıcı olan ve sabit disk sürücüsü gibi harici bir cihazda depolanan
verileri işleme yeteneğine bağlıdır.
Dolayısıyla, sabit diskte bu depolama özelliğine sahip olmak istersiniz.
Biraz daha yavaştır, ancak orada çok fazla veri depolayabilirsiniz ve büyük programların çok fazla veri depolaması
gerekir.
C, harici aygıtlara yazmak ve onlardan okumak için başlık dosyası standardında birçok işlev sağlar.
Dosyaları okumak ve yazmak için kendi kodunuzu yazmak zorunda değilsiniz, ancak verileri
daha uzun süre saklayabilen uygulamaların sunduğu avantajı görebilirsiniz.
Bir sürü avantajı var.
Verileri depolamak ve almak için kullanacağınız harici cihaz genellikle sabit disk sürücüsüdür.
Ancak, bahsedeceğimiz başlık dosyası işlevlerini herhangi bir harici depolama aygıtında kullanabilirsiniz.
Yani bir USB sürücüde kullanabilirsiniz, veri depolayan herhangi bir harici cihazda ve SSD sürücüde tüm örneklerle
kullanabilirsiniz.
Şimdiye kadar, kullanıcının girdiği tüm veriler kayboldu.
Program sona erdiğinde, bu geçici bellek olarak adlandırılır.
Vol time memory terimini her duyduğunuzda, belleğin kalıcı olmadığı ya da verilerin kalıcı olmadığı anlamına
gelir.
Program sona erdiğinde veya makine yeniden başlatıldığında kaybolur.
Dolayısıyla, kullanıcı programı aynı verilerle çalıştırmak isterse, geri yüklenmesi için her seferinde verileri tekrar
girmesi gerekir.
Bu çok rahatsız edici.
Programlamayı sınırlar.
Ve yine, bu uçucu bellektir.
Bir şeyleri dosyalarda sakladığınızda ve sabit diskte depoladığınızda, bu kalıcı depolamadır.
Hâlâ orada.
Makineyi yeniden başlattığınızda veya programınız çalışmadığında bile.
Bir dosyanın etrafında kaldığı, uçucu olmayan verileri depolayabildiği ve genellikle diskte veya günümüzde katı hal sürücüsü
ve SSD'de depolandığı için buna uçucu olmayan bellek denir.
Bu, depolamanın adlandırılmış bir bölümüdür ve damızlık standart IO, bu dosyaları okuyabilmek ve yazabilmek için
bilgi kullanımını içeren bir dosyadır.
Ancak, kalıcı depolama için bir dosyadan veri yazma ve okuma kavramını kullanacağız ve uygulamalarınızın
nasıl çok daha kullanışlı, çok daha sağlam ve çok daha ölçeklenebilir hale geldiğini fark edeceksiniz, çünkü artık büyük
miktarda veri depolama yeteneğine sahibiz ve ayrıca program sona erdiğinde veya bilgisayar yeniden başlatıldığında verilerin
kaybolması konusunda endişelenmemize gerek yok.
Bu yüzden dosyaları kullanmak çok ama çok avantajlı olacaktır.
Linux işletim sistemi veya Windows işletim sistemi içindeki bir dosya belirli bir şekilde saklanır.
Ancak programlama dili olan C'ye gelince, her bir bayt ayrı ayrı okunabilen bir bayt
dizisidir.
Bu, Unix'teki dosya yapısına karşılık gelir, ancak zorunlu değildir.
Sadece metin dosyalarını ve pencereleri okurken bir fark yaratır, çünkü boyut konusunda
endişelenmeniz gereken ekstra karakterler olabilir, ancak bu sadece bir bayt dizisidir.
Yani bir metin dosyanız varsa ve daha fazla bayt içeriyorsa, bu baytları yine de okuyabilirsiniz.
Sadece bu baytların neyi temsil ettiğini anlamanız gerekir.
İşte bir dosyanın neye benzediği ve C programlama dilini kullanarak onu nasıl okuyacağımız ve ona nasıl yazacağımız.
Bu sadece farklı ofsetlere sahip bir dizi bayttır.
Dosyanın başlangıcı sıfır olacaktır ve daha sonra dosya içinde her zaman farklı konumlar bulabilirsiniz.
Dört olabilir, dörde on iki olabilir, 100 bayt olabilir.
Ve sonra dosya sonu vardır ve dosya sonu genellikle EOF adı verilen özel bir işaretleyici ve bir dosya ile
işaretlenir.
Yani bir dosyanın başı, sonu ve geçerli bir konumu vardır.
Geçerli konum başlangıçta şu kadar bayt olarak tanımlanır.
Geçerli konum, herhangi bir dosya eyleminin gerçekleşeceği yerdir.
Bu pozisyonda yazacak ya da okuyacaksınız.
Ayrıca, mevcut konumu bir dosyada istediğiniz yere taşımak için hareket edebileceğiniz bazı işlevlerden
de bahsedeceğiz.
Sonunda bile, eğer sonunda ya da sonuna kadar okumak isterseniz.
İki tür dosya vardır.
Metin dosyaları ve ikili dosyalar vardır.
Metin dosyası, satırlar halinde düzenlenmiş bir karakter dizisi olarak yazılan verilerdir.
Her satır yeni bir satırla biter ve metin verileri karakterlerin nasıl yorumlandığına bağlı olarak sistemden
sisteme değişebilir.
Örneğin, DOS'ta Windows'ta her satırda bir satır başı ve bir satır besleme, yani bir ters eğik çizgi R ve bir ters eğik
çizgi N vardır.
Verileri okuduğunuzda veya yazdığınızda bunu anlamanız gerekir çünkü format biraz
farklıdır.
Ancak Linux'ta ters eğik çizgi yoktur.
R Ve bu yüzden metin verilerinin nasıl yazıldığını anlamalısınız, satırlara göre düzenlenmiş ve bir dizi bayt olmasına
rağmen, ikili veriler tam olarak bellekte göründükleri gibi bir dizi bayt olarak yazılır.
Dolayısıyla, ikili verilere sahip dosyalara örnek olarak veriler verilebilir.
Görüntü verileri veya müzik kodlama ikili dosyaları gibi dosyalarımız okunamaz.
Sadece bayt oldukları için bunları bir metin düzenleyicide görüntülemeye çalışırsanız, bu bölümde metin dosyalarına
odaklanacağız, ancak bir dosyaya istediğiniz herhangi bir veriyi yazabilirsiniz.
Bunu bir dizi bayt ve bunların bellekte nasıl göründüğü olarak yazabilir veya metin olarak yazabilirsiniz.
Ancak dosya gerçekten yazıldıktan sonra, bir metin olarak temsil edilse bile, sadece
bir dizi bayttan oluşacaktır.
Metin dosyalarını bir editörde görüntüleyebilirsiniz, bu da daha okunabilir hale getirir.
Dosyayı okumak için dosyanın formatını anlamanız gerekir ve DOS Windows veya Linux
üzerinde çalışıyorsanız, Windows'un veri yazarken fazladan karakterlere sahip olabileceğinden bahsettiğim şey budur.
Yani ikili bir dosyadaki 12 baytlık bir dizi 12 karakter olabilir, 12 adet sekize sekiz bitlik işaretli
tamsayı veya 12 adet işaretsiz tamsayı olabilir.
İkili yangınlar özellikle zordur çünkü Watson'ı sadece görünen bellek olarak saklarlar.
Yani ikili modda, dosyanın her bir bitine erişilebilir.
Ancak bir dosyadan bir şey okumak için, veri olarak orada ne olduğunu ve nasıl depolandığını anlamanız
gerekir.
Ve hangi sistem üzerinde çalıştığınıza bağlı olabilir.
Ayrıca metin mi yoksa ikili mi olduğuna da bağlı olacaktır.
Akarsular.
C programları sizin adınıza otomatik olarak üç dosya üzerinde açılır.
Akış bir dosyayı temsil edebilir, ancak akış her türlü girdiyi temsil edebilen daha genel bir terimdir.
Yani klavyeyi temsil edebilir, konsolu temsil edebilir, bir dosyayı temsil edebilir, bir soketi
temsil edebilir.
Ağ akışlarına alışkınsanız, akışlar daha genel bir terimdir ve C programlama dilinde sizin
için otomatik olarak açılan üç akış vardır.
Biri standart giriştir ve bu sisteminizin normal giriş aygıtıdır.
Genellikle varsayılan olarak klavyedir.
F taraması yaparken standart girişi kullandık, ancak aslında dosyalardan okumak için tarama kapalı seçeneğini kullanabilirsiniz.
Giriş akışını değiştirirseniz, belki giriş akışını bir dosya standart çıktısı olarak değiştirirsiniz,
bu genellikle konsol aracılığıyla ekranda görüntülenir.
Standart hata da ekrandadır, ancak bunu görebilmek için genellikle ampersand üç veya bunun gibi bir
şey kullanarak yeniden yönlendirmeniz gerekir.
Ancak bunlar bahsettiğim üç çıktıdır.
Standart girdi guitar ve scan F tarafından okunan dosyadır Standart çıktı output us ve print F tarafından kullanılır
biz çoğunlukla printf kullanıyoruz.
Ayrıca sistemdeki dosyaları standart girdi çıktısı olarak tanınacak şekilde yeniden yönlendirebilirsiniz.
Bu bir yönlendirme.
Bu, verileri yeniden yönlendirebileceğiniz, örneğin çıktıyı bir dosyaya gönderebileceğiniz veya girdiyi gönderebileceğiniz, standardın
aksine bir dosyadan girdi alabileceğiniz bir işletim sistemi kavramıdır.
Burası, küçüktür veya büyüktür sembollerini kullanabileceğiniz yerdir.
Standart hata çıktısının amacı, hata mesajlarını göndermek için mantıksal olarak farklı bir yer sağlamaktır.
Yani ekranda gösterilse bile ayrı bir şey.
Buna erişmek için özel bir komuta sahip olmanız gerekir.
Akış, veri için herhangi bir harici kaynak veya hedefin soyut bir temsilidir.
Bu nedenle, örneğin bir dosyadan daha geneldir.
Klavye.
Disk üzerindeki görüntü dosyalarınızdaki komut satırı.
Bunların hepsi akışlarla nasıl çalıştığınıza dair örneklerdir.
C++ çalışmaya başladığınızda akışlar çok daha önemli hale gelecektir.
C kütüphanesi veri akışlarını okumak ve yazmak için fonksiyonlar sağlar, böylece bir akışla eşlenen herhangi bir harici
cihazı okumak ve yazmak için aynı giriş çıkış fonksiyonlarını kullanabilirsiniz.
Bu yüzden klavyeden okumak için F taramasını kullanabileceğinizi söyledim.
Ayrıca dosyalardan okumak için F taramasını da kullanabilirsiniz.
Her şey girdinin ne olduğuna, akışın nereye işaret ettiğine bağlıdır.
Bu yüzden fonksiyonlar bunu yapmak için çok ama çok kullanışlı ve çok ama çok esnektir.
Bu, dosyanın ne olduğuna ve neden kullandığımıza, nasıl kalıcı veri olduğuna, uçucu olmayan belleğe
ilişkin üst düzey bir genel bakış.
Burada kalacak, onu kullanacağız ve programımız için veri depolamamız gerektiğinde onu
okumak ve ona yazmak için standart IO başlık dosyasını kullanacağız ve programlarımız çok daha sağlam,
çok daha kullanışlı ve çok daha esnek olacak.
Bir sonraki dersimizde, standart IO başlığındaki fonksiyonları kullanarak bunu gerçek anlamda uygulamaktan
bahsedeceğiz.
Teşekkür ederim.