08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

İşlevin geri dönüş değeri FILE yapısı türünden bir adrestir. İşlev, açılan dosyaya ilişkin<br />

birtakım bilgileri FILE yapısı türünden bir nesnenin elemanlarında saklar ve bu nesnenin<br />

adresini geri döndürür. İşlevin geri dönüş değerine ilişkin FILE yapısı stdio.h başlık<br />

dosyası içinde bildirilmiştir. Bu yapının elemanları standart değildir. Sistemden sisteme<br />

değişiklik gösterebilir. Zaten programcı bu yapının elemanlarına gereksinim duymaz.<br />

fopen işlevi işletim sisteminin dosya aç sistem işlevini çağırarak dosyayı açar ve dosyaya<br />

ilişkin bazı bilgileri FILE yapısı türünden bir nesnenin elemanlarına yazarak bu nesnenin<br />

başlangıç adresini geri döndürür. Örneğin "file handle" değeri de bu yapının içerisindedir.<br />

Tabi fopen işlevinin geri verdiği FILE türünden adres güvenli bir adrestir. Dosya çeşitli<br />

sebeplerden dolayı açılamayabilir. Bu durumda fopen işlevi NULL adresine geri döner.<br />

İşlevin geri dönüş değeri kesinlikle kontrol edilmelidir. Tipik bir sınama işlemi aşağıdaki<br />

gibi yapılabilir:<br />

/*…..*/<br />

FILE *f;<br />

if ((f = fopen("mektup.txt", "r")) == NULL) {<br />

printf("cannot open file"...\n);<br />

exit(EXIT_FAILURE);<br />

}<br />

Yukarıdaki örnekte ismi mektup.txt olan bir dosya okuma amacıyla açılmaya çalışılıyor.<br />

Dosya açılmaz ise ekrana bir hata iletisi verilerek, standart exit işlevi ile program<br />

sonlandırılıyor. Yukarıdaki kod parçasının atama işlecinin ürettiği değerin nesneye atanan<br />

değer olmasından faydalandığını görüyorsunuz. Şüphesiz fopen işlevi ile açılmak istenen<br />

bir dosyanın açılamaması durumunda programın sonlandırılması zorunlu değildir. Ancak<br />

bundan sonra verilecek kod örneklerinde, bir dosyanın açılmaması durumunda şimdilik<br />

program sonlandırılacak.<br />

Dosya ismi dosyanın yeri hakkında sürücü, yol gibi bilgi içerebilir. Dosya ismi bir dizge ile<br />

veriliyorsa yol bilgisi verirken dikkatli olmak gerekir. Yol bilgisi '\' (ters bölü) karakteri<br />

içerebilir. dizge içinde '\' karakterinin kullanılması, '\ 'karakterininin onu izleyen<br />

karakterle birlikte, önceden belirlenmiş ters bölü karakter değişmezi (escape sequence)<br />

olarak yorumlanmasına yol açabilir. Örneğin :<br />

fopen("C:\source\new.dat", "r");<br />

Yukarıdaki işlev çağrısında derleyici '\n' karakterini "newline" karakteri olarak yorumlar<br />

'\s' karakterini ise "undefined" kabul eder. Bu sorundan sakınmak '\' karakteri yerine<br />

'\\' kullanılmasıyla mümkün olur:<br />

fopen("C:\\source\\new.dat", "r");<br />

Sona ekleme modları ("a", "a+") çok kullanılan modlar değildir. Dosyaya yazma<br />

durumunda "w" modu ile "a" modu arasında farklılık vardır. "w" modunda dosyada olan<br />

byte ın üzerine yazılabilir. "a" modunda ise dosya içeriği korunarak sadece dosyanın<br />

sonuna yazma işlemi yapılabilir.<br />

Bir dosyanın hem okuma hem de yazma amacıyla açılması durumunda yani açış modunu<br />

belirten dizgede '+' karakterinin kullanılması durumunda dikkatli olmak gerekir. Okuma<br />

ve yazma işlemleri arasında mutlaka ya dosya konum göstericisinin konumlandırılması<br />

(mesela fseek işlevi ile) ya da dosyaya ilişken tampon bellek alanının (buffer) boşaltılması<br />

gerekir. Bu konuya ileride ayrıntılı bir şekilde değinilecek.<br />

Bir dosyanın açılıp açılamayacağı aşağıdaki küçük programla sınanabilir:<br />

Program komut satırından<br />

453

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!