• Sonuç bulunamadı

Dosyalar 1.1 Dosya Nedir?

N/A
N/A
Protected

Academic year: 2022

Share "Dosyalar 1.1 Dosya Nedir?"

Copied!
8
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

1

Dosyalar

1.1 Dosya Nedir?

Bilgisayar kullanımını gerektiren çoğu işler çok sayıda veri kullanır. Üstelik, aynı konularda bilgi veren verilerin gruplandırılarak bilgisayar izlencesinin her yürütülüşünde yeniden kullanılması gerekebilir. Örneğin, bir kurumda calışan personelin Maaş Bordrosunu yapan izlencenin her ay yürütülüşünde herbir personelin adı, soyadı, sicil_no, derecesi, kademesi, göstergesi, kat- sayı,. . . vb bilgiler ana belleğe aktarılacaktır. Program yürüyüşü bitip, veri- ler ana bellekten silinince, yeniden girilene kadar o verileri kullanma olanağı olamayacaktır.

Her ay bu verilerin, kullanıcı tarafından yeniden girilmesi pratik bir yol değildir. Bunun yerine, her zaman kullanılacak verilerin ana bellek dı- şında kalıcı bir kayıt ortamına kaydedilerek, gerektiğinde oradan ana bel- leğe aktarılabilmeye hazır durumda tutulması uygun bir yöntem olacaktir.

Bu bicimde, bir dış ortama kaydedilerek saklanan veri kümelerine dosya (dosya, file) denilir. Eski programlama dillerinin birçoğu giriş-çıkış deyim- lerine sahiptir; klavye, disk,teyp, printer, ekran gibi çevre birimlerinin her- birisine bağlantı yapabilmesi için özel komutlar gerekir. Dosyaları açan, kapayan, dosyalar arasında veri alış verişi yapan anahtar sözcükleri vardır.

Ancak, çağdaş işletim dizgelerinin çoğu klavye, printer, disk, ekran v.b. çevre birimleriyle doğrudan ilişki kurmaz; onların herbirisini bir ka- nal (channel) olarak algılar. Dolayısıyla bir kanaldan veri alır (giriş) ya da bir kanala veri gönderir (çıkış). Böylece, bu kanallar yoluyla işletim dizgesi çevre birimlerine bağlanmis olur. Bu mekanizmanin avantaji sudur: girişin ya da çıkisin yapılacagi çevre biriminin değişmesi, ana programda bir deği-

(2)

2 BÖLÜM 1. DOSYALAR

şiklik yaratmıyacaktır. Örneğin çıktınin ekrana, printere ya da bir dosyaya gönderilmesi işlemleri temelde aynıdir; yalnızca istenen çevre birimine bağlı olan kanalın secilmesi yeterlıdır.

C dilinde, özellikle, bütün giriş ve çıkışlar kanallarla yapılır. Örneğin getchar() fonksiyonunu klavyeden veri alan bir fonksiyon olarak değil, belirli bir kanaldan veri alan bir fonksiyon olarak düşünmek gerekir. Bu kanal stdin adıyla bilinir. Bu kanal klavyeye bağlıdır. Benzer olarak, ekrana giden çıkışları yapan kanala stdout denilir. Bu bağlamda dosya açma, dosyaya veri yazma ya da dosyadan veri okuma işlemleri birer kanal ile yapılan işlemlerdir.

Daha açık söylersek, C dilinde (C derleyicisinde) giriş-çıkış deyimleri yoktur. Dosya açıp kapamaya yarayan anahtar sözcükler yoktur. Bütün bunlar birer fonksiyon ile yapılır. Bu fonksiyonlar bir kütüphanede (LIB) biriktirilir. Böyle olduğu için C dili basittir; kolayca her donanım siste- minde kullanılabilir. Yeni bir donanım dizgesine uyarlamak için yalnızca il- gili fonksiyonları değiştirmek yetecektir. Özelikle, yeni dizge için giriş-çıkış işlemlerini yapacak kanalları belirlemek yeterlıdır. C dilinde bütün girdi ve çıktılar dosya girdisi ve çıktısıdır. Program calışırken, girdi ve çıktılar ya işletim sistemi tarafından otomatik olarak açılıp kapanan dosyalaral yapılır ya da programcının isteği ile açılıp kapanan dosyalarla yapılır. C derleyicile- rinin çoğu aynı anda 20 kadar dosyanın açılmasına izin verirler. Bunlardan ilk birkaç tanesi klavye, ekran v.b. çevre birimleriyle ilişkilıdır. Tabii iste- nirse bunlar başlıkka kanallara yöneltilebilmektedir. Öteki dosyalarr kayıt ortamlarıyla ilişkilıdır. Kayıt ortamları sabit disk, floppy disket, teyp v.b.

olabilir.

1.2 Dosya İşaretçisi

(file pointer)

C dilinde dosyalar programın dışında yaratılır. Her dosyanın bir adı vardır. Dosya bir dizin’e yazılıyorsa, ayrıca o dizin’e giden yolu (path) da belirtmek gerekir. Programda her dosya bir pointer ile bil- dirilir:

1 FILE ∗ fp ;

bildirimi bir dosyayı işaret eden fp adlı bir pointer yaratır. FILE söz- cüğü C dilinde bir veri tipidir. Standart LIB fonksiyonları arasında stdio.h adlı başlık (header) kütüğünde bildirilmistir. Yukarıdaki fp pointerinin işaret ettigi dosyayı ilk defa yaratmak ya da daha önce

(3)

yaratılmışsa, onu açmak için fopen() fonksiyonu kullanılır. Bu iş için sözdizimi söyledir:

f p = f o p e n (" d o s y a \ _adı " , " k i p ") ;

Burada dosya_adı, genelde C dilinde var olabilecek bir addır. kip (mode) ise dosyanın hangi amaçla açıldığını belirten bir simgedir. Bu simgeler şunlardan birisi olabilir:

r okunmak i ç i n , w ü s t ü n e yazmak i ç i n

a sonuna e k l e m e k i ç i n

"r" modu Ingilizce’de read (oku) sözcüğünun baş harfidir. Daha ön- ceden yaratılmış bir dosyayı okumak için açar. İstenen dosya yoksa, hata iletisi verir. Dosya işaretçisi, fp, dosyanın başlangıcını işaret eder.

Dolayısıyla, okunmak için açılan dosya başlangıcından itibaren sırayla okunabilir. Ancak istenirse, belirli sayıda byte atlatılarak, kaçıncı byte isteniyorsa dosya işaretçisinin istenen o byte uzerine gelmesi ve ora- dan itibaren okuması sağlanabilir. Bunun nasıl yapıldığını biraz sonra göreceğiz.

Bazı derleyicilerde, yukarıdaki standard modlara ek olarak başka modlar var olabilir. Örneğin TURBO C derleyicici, yukarıdakilere ek olarak, aşağıdaki modları de destekler:

" a+" Eklemek i ç i n a ç ( oku ve yaz ) ,

2 " b " Blok I /O i ç i n a ç

" j " B i n a r y okumak i ç i n aç ,

" k " B i n a r y yazmak i ç i n aç ,

" r +" Oku/Yaz e r i ş i m i i ç i n aç ,

" s " P a y l a ş ı m l ı s a y f a i ç i n aç ,

7 " u " G ü n c e l l e m e i ç i n ac ,

" x " Önemli g u n c e l l e m e i ç i n aç ,

"w+" S i l , y e n i d e n y a r a t ve oku / yaz i ç i n a ç .

C dilinde bir dosya, byte’lardan oluşan bir dizidir. Buna veri ırmağı (data stream), ya da veri dizini de denilebilir. Belirli bir baş- langıç yeri ve belirli bir bitis yeri vardır. Herbir öğesinin bir prog- ram için belirli bir anlamı vardır. Belirli sayıda ardışık byte’lardan oluşan gruplara belirli tür veriler yazılabilir. Böylece eşit uzunlukta benzer gruplardan oluşan veri dizileri elde edilir. Yapı (struct) kulla- nılarak yaratılan dosyalar bu tür dosyalardır. Belli bir yapıdan oluşan bir dosyanın text dosyalarıdır. Aslında C dilindeki bütün kütükler C text dosyalarıdır. Ancak, bir yapıdan oluşan dosya, o yapıdaki verileri ardışık byte’lara kaydeden bir kaydı (record) o yapının uzunluğuna bağlıdır ve byte cinsindenölülebilir. En küçük uzuluktaki yapı 1 byte

(4)

4 BÖLÜM 1. DOSYALAR

uzunluğundaki kayıtlardan oluşan dosyalardır. Bunlar text dosyaları- dır. ASlnda C dilindeki bütün dosyalar text dosyalarıdır. Ancak bir yapıdan oluşan dosya, o yapıdaki verileri ardışık byte’larqa kaydeden bir text dosyasıdır. Yapının kaç byte uzunluğunda olduğu kolayca he- saplanabildiğine göre, bir dosyada istenilen kayda erişmek olanaklıdır.

Bir değişkene ayrılan yerin uzunluğunu byte cinsinden hesaplayan si- zeof() adlı bir C fonksiyonu vardır. Bu fonksiyon ile dosyayı oluşturan yapının uzunluğu bulunabilir. Sonra, yapı uzunluğu ile istenen kayıt numarası çarpılarak aranan kaydın ilk byte’ına ulaşılabilir.

1.3 Buffer İşlemleri

C dili bir dosya açtığı zaman ana bellekte ona bir yer ayırır. Buna dosya için ayrılan buffer (yastık, tampon) alanı diyeceğiz. Dosya ile program arasındaki veri alış-verişini buffer fonksiyonları denilen bazı C LIB fonksiyonları yapar. Programın isteğine göre, bazıları dosyaya yazılacak verileri buffera kaydeder, bazıları da bufferdaki verileri dos- yanın bulunduğu kayıt ortamına gönderir. Bazıları da dosyadan oku- nacak verileri buffera gönderir. Baska bir deyişle, bir dosyaya ayrılan buffer alanı dosyaya giden ya da dosyadan gelen kayıtlar için gecici bir bekleme deposudur. Dosya kapatılırken, bufferda kalan bütün veriler dosyaya aktarılır. Herhangi bir fonksiyonun buffera taşıdığı veriler buf- fera sığmazsa, genel olarak ffill(), fflush() fonksiyonları yardıma çağ- rılır. Bu fonksiyonlar buffera veri yükler ve buffardaki verileri dosyaya aktarır.

C LIB içindeki az sayıda I/O foksiyonları buffer işlemlerine gerek olmadan doğrudan doğruya dosyaya kayıt yapar ya da dosyadan kayıt okur. Bu fonksiyonların calışma bicimleri C derleyicisine ve donanıma bağlı olarak değişkenlik gösterir. Bu fonksiyonlar buffer işlemlerini ara- dan çıkardığı için dosya ile ilgili veri alış-verişini çok hızlı yapabilirler.

Ancak standart olmadıkları, yani derleyiciye ve donanıma bağlı ola- rak değişkenlik gösterdikleri için, her derleyiciye ya da her donanıma uygulanamazlar. Örneğin, birçok derleyicide varolan putch() C LIB fonksiyonu bir karakteri doğrudan ekrana gönderir; hiçbir stdin, st- dout fonksiyonu ya da buffer fonksiyonu kullanmaz:

1 put ch (i n t c ) {

bdos ( ) x06 , c ) ; }

(5)

1.4 Dosya Fonksiyonları

fopen() Bir dosyayı açar.

1 FILE ∗ fp ; . . .

f p = f o p e n (" do s y a _ a d ı ", " k i p ") ;

fclose() Açılmış bir dosyayı kapatır. Kapatmada önce dosya buffer’indaki verileri dosyaya yollar.

FILE ∗ fp ;

2 . . .

f c l o s e ( f p ) ;

fflush() Çıkış buffer’ındaki verileri dosyaya yollar. Kütüğün açık ol- duğunu varsayar.

FILE ∗ fp ;

2 . . .

f f l u s h ( f p ) ;

fgetc() Belirlenen dosyadan bir karakter okur.

FILE ∗ fp ;

2 c h a r ch ; . . .

ch = f g e t c ( f p ) ;

fputc() Belirlenen dosyaya bir karakter gönderir (yazar).

1 FILE ∗ fp ; c h a r ch ; . . .

f p u t c ( ch , f p ) ;

getc() Belirtilen dosyadan bir karakter okur.

1 ch = g e t c ( f p ) ;

putc() Belirlenen dosyaya bir karakter yollar.

FILE ∗ fp ; c h a r ch ; . . .

4 s t a t = p u t c ( ch , f p ) ;

fgets() Belirlenen dosyadan, pointerin bulunduğu yerden sonraki ilk satırı okur.

(6)

6 BÖLÜM 1. DOSYALAR

1 FILE ∗ fp ;

c h a r d i z i b u f [ ] , ∗ f g e t s ( ) ; i n t max ;

. . .

f g e t s ( d i z i b u f , max , f p ) ;

fprintf() Bir dosyaya formatlanmıs çıkış gönderir. printf() fonksiyonu için kullanılan format kurallarını aynen kullanır; ancak çıktıları, ekran yerine fp file pointerinin işaret ettiği dosyaya gider. Fonk- siyonun değeri çıkan verilerin byte sayısıdır. Yanlış olduğunda EOF değerini alır.

i n t f p r i n t f ( FILE ∗ fp , c o n s t c h a r ∗ format , . . . ) ;

fputs() Açılan dosyaya bir string yazar.

FILE ∗ fp ; c h a r ∗ d i z i b u f ; . . .

4 f p u t s ( d i z i b u f , f p ) ;

fread() Herbiri m byte uzunlukta n veriyi dosyadan okur. Okunan veri sayısı fonksiyonun değeridir. Türü, veri uzunluğuna bağlı olarak int, long v.b. olarak belirlenir.

1 t ü r f r e a d (v o i d ∗ ptr , tür m, tür n , FILE ∗ fp ) ;

freopen() Daha önce fopen ile açılmış bir dosyayı kapatır; yeniden bir dosya açar ve onu dosya pointerine bağlar; yani açık bir kanalı kapatıp yenisini açar.

FILE ∗ eskiDosya , ∗ f r e o p e n ( ) ; c h a r ∗ yeniDosya , ∗ kip ; . . .

4 f r e o p e n ( yeniDosya , k i p , , e s k i D o s y a ) ;

fscanf() Bir dosyadan formatlanmış veri okur.

1 i n t f s c a n f ( FILE ∗ fp , c o n s t c h a r ∗ format , . . . ) ;

Fonksiyonun değeri, dosyadan okuyup cevirebildiği ve buffera de- poladığı veri alanlarının sayısıdır. Okuduğu ancak depolayama- dığı veri alanlarının sayısını dışlar.

fwrite() Herbiri size byte uzunlukta n veriyi dosyaya yazar. Yazılan veri sayısı fonksiyonun değeridir. Türü, veri uzunluğuna bağlı olarak int, long v.b. olarak belirlenir.

(7)

t i p f w r i t e (c o n s t v o i d ∗ ptr , tür m, t ü r n , FILE ∗ fp ) ;

fflush() Sistem bufferindakileri dosyaya gönderir.

s t a t = f f l u s h ( f p ) ;

ftell() Açık dosyanın pointerinin pozisyonunu gösterir.

l o n g f t e l l ( FILE ∗ fp ) ;

fseek() Dosya pointerinin istenen yere gitmesini sağlar.

i n t f s e e k ( FILE ∗ fp , l o n g y e n i , i n t e s k i ) ;

Dosya pointerini, eski konumunda iken yeni konumuna gönderir.

1.5 Seçkili (rasgele) Erisim

lseek() Oku/Yaz dosya pointerini hareket ettirir. Seçkili (Rasgele)1 erişimi sağlar.

C kütükleri karakter dizileri olduğu için, kayıt ortamınin (dis- ket, disk, teyp) yeteneklerini kullanarak, bir C kütüğünde iste- nen kayda erişilebilir. Bunun için dosyayı oluşturan kayıtların (record) uzunluğunu byte cinsinden bilmek yetecektir. Bu isi ya- pan LIB fonksiyonu

l o n g l s e e k ( k a n a l , l o n g n e r e y e , i n t n e r e d e n )

bicimindedir. Burada

k a n a l : d o s y a y ı b e l i r l e y i c i ad ,

n e r e y e : Dosya p o i n t e r i n i n bulunduğu y e r d e n ne k a d a r b y t e a t l a y a c a ğ ı n ı b e l i r t e n s a y ı ,

n e r e d e n : Dosya p o i n t e r i n i n n e r e d e n i t i b a r e n a t l a y a c a ğ ı n ı b e l i r t e n s a y ı . Bunun i ç i n üç s e ç e n e k v a r d ı r :

4

0 : Dosya b a ş l a n g ı c ı n d a n i t i b a r e n , 1 : Bulunduğu y e r d e n i t i b a r e n , 2 : Kütüğün sonundan g e r i y e d oğ ru .

Örneğin,

1rasgele sözcüğünün Türkçe anlamı, çoğunlukla, raslantı, gelişi-güzel terimlerine kar- şılıktır. Oysa bilgisayarda "random access" teriminin anlamı, seçilen, istenilen veriye doğ- rudan erişimdir. O nedenle, bu kitapta "random access" karşılığı olarak "seçkili erişim"

terimi kullanılacaktır.

(8)

8 BÖLÜM 1. DOSYALAR

l s e e k ( b o r d r o , 1 2 6 0 , 0 ) ;

deyimi bordro adlı dosyayı işaret eden pointerin, başlangıcından itibaren 1260 -ıncı byte üzerine gelmesini sağlar.

rewind Pointeri dosyanın başlangıcına yollar.

v o i d r e w i n d ( FILE ∗ fp ) ;

setbuf() Dosya için bir buffer ayırır.

v o i d s e t b u f ( FILE ∗ fp , c h a r ∗ buf ) ;

Eger buf NULL ise I/O buffera girmez; değilse giriş ve çıkışlar buffera girer. Buffer BUFSIZ byte uzunluktadır.

Referanslar

Benzer Belgeler

yönünden yağışlar süre ve yoğunluğuna göre dört gruba ayrılır...  a) Uzun süreli bol yağışlar: Yağışlar ne kadar yavaş ve uzun süreli olursa, bu yağışların.

Normal doku büyümesi ile koordine olmayan, büyümenin başlamasına sebep olan uyarı kalktıktan sonra da büyümeye devam eden anormal doku kitlesidir.. “-oma” eki hangi

Bir organın arteriyal veya venöz kan akımında oluşan tıkanma sonucunda gelişen sınırlı doku

Eleman seçim penceresinde bulunan fakat çalışma alanına yerleştirilmemiş malzemeler ile çalışma alanı dışarısına yerleştirilmiş olan malzemelerin..

 save isim: çalışma sayfası değişkenlerini isim.mat olarak kaydetme.  save isim x y: x ve y değişkenleri isim.mat

Sıralı erişim dosyası yaratma Sıralı erişim dosyasından okuma Sıralı erişim dosyalarını güncelleme Rasgele erişimli dosyalar.. Sıralı erişim dosyalarını yaratma

• Spor politikasının temelini spor tesisi yapımı, sporcu eğitimi, amatör spor, profesyonel spor ya da sporda altyapıya öncelik veren bir

“Tarih, bir tarihçinin geçmişteki belirli bir döneme ve coğrafyaya ait olayları keşfetmesi, derlemesi ve neden-sonuç ilişkisi içinde belgelere dayanarak nesnel