Dosya İşlemleri #1 – C Programlama Dili

in #tr5 years ago


C Programlama dili derslerinin bu dersiyle beraber artık dosya işlemleri konusuna başlıyoruz. C dilinde dosya işlemlerinden önce hangi işletim sisteminde c programı yazılacaksa o işletim sisteminin dosya yapısının iyi bilinmesi gerekir.

C programlama diliyle yazılmış bir uygulamadaki değişkenler veya işlenen veriler RAM ( Random Access Memory) bellekte saklanır. Uygulama sonlandırıldığında RAM boşaltılacağından aynı verilere sonradan erişmek imkansız olacaktır. Böyle bir durumda uzun vadede kullanmak istediğimiz verileri saklamamız gerekir. Bunun için de veriler CD, sabit disk gibi ortamlarda kaydedilir ki gerektiğinde tekrar okunabilsin.

Peki bu tür ortamlarda veriler nasıl saklanır? Secondary Storage Device (yan bellekler) dediğimiz sabit disk veya benzeri ortamlara bilgiler kalıcı olarak "0 ve 1 den oluşan sıralı veriler" halinde yazdırılır. Bu sıralı veriler farklı isimlerdeki veri kümelerinde(dosya) toplanır.

Bu sıralı veriler, suyun akışını andırır şekilde değişkenlere dolduğundan ( atanırlar) C dili her dosyayı ardışık byteların akışı gibi algılar. Bu sebeple sıralı verilerin bu akışı stream yani akış olarak adlandırır.

Bütün C programlarında uygulamamızı çalıştırdığımızda standart olarak stdin, stdout ve stderr stream’leri açılır. Bu akışlar; suyun geçici bir depoda toplanıp sonra başka yere aktarılmasında olduğu gibi, çalışan program ile dosya arasında tampon bir bölge oluştururlar. Bilgiler bu tampon bölgede biriktilir ve sonrasında depolama aygıtına gönderilir.

Yani streamler bir dosyaya ulaşmak için kullandığımız mantıksal bir ara birimdir. Streamler önemlidir. Çünkü

Dosya giriş ve çıkış işlemlerinin temelini, bilgisayarı oluşturan aygıtlar için mantıksal bir arabirim görevi yapan bu streamler oluşturur.

Bu streamler, stdio.h başlık dosyası içinde tanımlanmış olan FILE adlı bir struct veri türünden bildirimi yapılan bir pointer ile kullanılır.

C dilinin bu dosya sistemi sayesinde farklı donanım elemanları ile çalışabiliriz: klavye, ekran, disk sürücü veya bilgisayardaki herhangi bir port gibi.

Dosyaların yapıları ve kapasiteleri farklı olabilir ancak streamlerin tamamı aynıdır. Aynı stream yapısı sayesinde farklı donanım elemanlarını benzer bir şekilde tanımlama imkanına sahip oluruz.

Böylece sabit diskte bulunan bir dosyaya yazı yazmak için kullandığımız fonksiyonları aynı zamanda ekrana veya yazıcıya yazı yazmak için de kullanabiliriz.

Ayrıca her dosyanın sonunda dosya sonunu gösteren bir EOF (End of File) işareti vardır. Veri akışı esnasında dosyanın bitip bitmediği kontrolü EOF sayesinde yapılır.

Özetle diyebiliriz ki, bir uygulama yazdınız ve bu uygulamada verileri klavyeden okumak yerine sabit bir ortamdan okumak istiyorsanız ya da verileri ekrana yazdırmak yerine sabit bir diske yazdırmak istiyorsanız programlarınızda dosya işlemlerini kullanmak zorundasınız.

Ayrıca stream, bir dosyaya erişmek için kullanılan mantıksal bir ara birimdir, ancak burada dosyadan kastedilen bildiğimiz bir dosya olabileceği gibi, ekran, klavye gibi donanım elemanları da olabilir.

Bir stream’in dosya ile olan bağlantısını sağlamak için açma işlemi yapılırken, dosya ile olan bağlantısını kesmek için de kapama işlemi uygulanır. Dosyayı bir kez açtıktan sonra dosyadan programımıza bilgi aktarabilir ya da var olan dosyanın içeriğini değiştirebiliriz.

Dosya Türleri

Dosyalar türleri bakımından ikiye ayrılır:

  • Metin Dosyaları (Text Files)
  • İkili Dosyalar ( Binary Files)

Çalışılacak dosya türüne göre dosyalar açılır ve kaydedilir.

Text Files, sıralı ve satırlar halinde metinsel bilgiler içeren dosyalardır. Bu dosyalardaki her bir satırda toplam 255 karakter bulunur. DOS işletim sisteminde her satırın sonunu belirleyen bir satır sonu (End of Line – EOL) işareti vardır. Kaynak kod içerisinde satır sonlarına “\n” newline karakteri konur ancak program dosyaya kayıt yaparken satır sonuna CR-LF (Cariage Return- Line Feed) işareti koyar. Bu aslında bahsettiğimiz satır sonu işaretidir. Veri okuması yapılırken de bu satır sonu işareti programımıza “\n” newline karakteri olarak çevrilir.

Binary Files da ise Text files da olduğu gibi (newline dönüşümü) herhangi bir karakter dönüşümü yapılmaz. Yani ikili streamden diske bir dosya kaydedildiği zaman ya da tam tersi diskten programımıza bir veri aktarıldığında ikili dosya içinde bulunan karakterlerde herhangi bir değişiklik yapılmaz.

Hem binary files hem de text files lar açılmadan önce fonksiyona dosya tipi verirler. Ancak binary dosyalarda kayıt için satır sonu karakteri ya da başka bir işaretin özel bir anlamı yoktur.

Aktif Konum

Aktif konum, bir dosyaya yapılacak bir sonraki girişteki imlecin konumudur. Mesela 100 byte uzunluğundaki bir dosyanın ilk erişiminde 40 byte’ını okumuş olalım. Bir sonraki dosya okuma işleminde aktif konum 41.byte da konumlanacaktır. Yani dosya işlemlerinde yapılan bir sonraki işlemde, işlem dosya başından değil kalınan yerden devam eder.

Bir dosya açıldığında aktif konum göstergesi, bu dosyanın başlangıcını gösterirken daha sonra dosyadan yapılan her okuma ve yazma işleminde otomatik olarak konum en son kalınan yere ilerler.

Dosya İsimleri

Diskteki her dosyanın bir ismi vardır ve bu isimler kullanılarak dosyalar üzerinde işlem yapılır. Dosya isimleri, diskte string olarak saklanır. İsimlendirme kuralları işletim sistemine göre değişiklik arz etse de 256 karaktere de kadar olabilir.

Mesela Windows işletim sistemlerindeki dosya isimlerinde “ /, \ , :, *, ?, <, >, |” karakterleri bulunamaz. Genel olarak da dosya isimlerinin son 3 hanesi nokta ile ayrılarak dosya tipini ifade edecek karakterler getirilir. .exe, .gif, .png, .jpeg gibi.

Dosya isimleri duruma göre bulundukları yerin yolunu (path)  veya sürücü ismini (C:, D:) içerebilirler. Bir program yazdınız ve dosyanın yolu ve sürücüsü verilmemişse o dosyanın güncel klasörde olduğu kabul edilir.

Yazdığımız bir programda dosya yolunu belirteceksek eğer  1 adet backslash ( \ ) yerine 2 adet backslash kullanmalıyız. Bunun sebebi string ifadelerde bu karakterin özel bir anlamı olduğu içindir.

“C:\\Data\\dosya.txt” gibi.

Eğer dosyanın yerini biz programdan vermeyip de kullanıcıdan alacaksak 2 backslash yerine tek backslash girilmelidir.

Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.

Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.

Kaynak belirtilmeyen görseller @etasarim a aittir. / Pictures that don’t have any source belongs to @etasarim.



Posted from my blog with SteemPress : http://etasarim.cloudaccess.host/05/04/2019/dosya-islemleri-1-c-programlama-dili/
Sort:  

Yani streamler bir dosyaya ulaşmak için kullandığımız mantıksal bir ara birimdir. Streamler önemlidir.

Mantık önemli, mantıksalsa tabiiki stream de önemli olacak. Şöyle ki;

“C:\Önemli\Mantık\Mantıksal\Ara_Birim\Stream.txt” gibi.

;) Nasıl da kapıyorum her şeyi :)

Vaaay, gerçekten çok çabuk kapıyorsunuz hocam tebrik ediyorum :) Ayrıca böyle anlamlı bir yorum bıraktığınız için de ayrıca teşekkür ediyorum .

Hi, @etasarim!

You just got a 1.82% upvote from SteemPlus!
To get higher upvotes, earn more SteemPlus Points (SPP). On your Steemit wallet, check your SPP balance and click on "How to earn SPP?" to find out all the ways to earn.
If you're not using SteemPlus yet, please check our last posts in here to see the many ways in which SteemPlus can improve your Steem experience on Steemit and Busy.


Bu yazı Curation Collective Discord Sunucusunda küratörlere önerilmiş ve manuel inceleme sonrasında @c-squared topluluk hesabından oy ve resteem almıştır.
This post was shared in the #turkish-curation channel in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.
@c-squared runs a community witness. Please consider using one of your witness votes on us here

Thanks for support :)

Congratulations! This post has been upvoted from the communal account, @minnowsupport, by etasarim from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.

If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.

Coin Marketplace

STEEM 0.33
TRX 0.11
JST 0.034
BTC 66753.89
ETH 3256.47
USDT 1.00
SBD 4.34