Bu ilk makalemde, size 
				"C" de dosya oluşturup, onun üstünde nasıl işlem yapacağımızı anlatacağım. 
				Yalnız bunu yaparken, bir konu üzerinden gideceğime, kendi yazmış olduğum basit 
				örneklerden yaralanacağım. Benim de "C" öğrenirken en muzdarip olduğum şey, 
				salt bilgiden çok, uygulamaya yönelik yazıların kısıtlı olmasıydı. Bu makale 
				sonunda "C"nin, bu gerekli ve olmazsa olmazlarından, dosya işlemleri, hakkında 
				bilgiye sahip olacaksınız. Bu yazımda kullanacağım program, ( her programıma 
				özgün bir isim vermek adetimdir) aspecden V 0.9 isimli küçük bir sözlük 
				programı olacaktır.Tabi ki bu sözlük programından daha güzel şeyler çıkartmak 
				ise size kalmış bir olaydır. (Yaşasın GNU! ). 
		
		
			İlk önce, programımızın taslağını oluşturalım. Bu sözlük programında, bize lazım 
				olan kelimelerimizi eklemek ve onları istediğimiz zaman çağırıp, istediğimiz 
				sözcüğü bulmak, aynı zamanda basit bir database mantığı var. Bunun için kendi 
				yarattığımız iki fonksiyon kullanacağız: ekle() ve oku().Main’inimiz ve menünün 
				düzeneği, kendi yaratıcılığımıza kalmış. Önce, ekle fonksiyonumuzu yazıp, yeni 
				bir dosya oluşturalım. Yarattığımız dosya, sözcüğümüzün adını taşısın ve içinde 
				sözcüğümüzün anlamını barındırsın.
			
			ekle fonksiyonumuz :
			
				
					
						
							void ekle(void) 
								{ 
								    clrscr();  
								    FILE *fp; 
								    char sozcuk[maks], aciklama[maks];
								 
								   
								 
								    fflush(stdin); 
								    printf("eklenecek sözcüğü giriniz\n");
								 
								    gets(sozcuk);
								 
								    fp=fopen(sozcuk,"wb");
								 
								    printf("aciklamasini giriniz\n");
								 
								    gets(aciklama);
								 
								    fwrite(&aciklama,sizeof(aciklama),1,fp);
								 
								    fclose(fp);
								 
								}
							
						 | 
					 
				 
			
			Not: Eğer Windows’dan farklı olarak Linux İşletim sistemini veya Dev-C++ tarzı 
				bir derleyici kullanıyorsanız, içlerinde conio.h başlık dosyasını 
				barındarmadığı için, Windows altında, system("cls") Linux altında 
				system("clear") kullanınız.
			
			Öncelikle FILE isimli bir veri yapısı kullanıyoruz ve fp isimli bir işaretçi ile 
				belirtiyoruz.Burada fp yerine, istediğiniz ismi kullanabilirsiniz. FILE stdio.h 
				başlık dosyası içinde bildirilmiştir. FILE’ın içinde, dosyayla ilgili bazı 
				bilgiler tanımlanmışdır ; dosyanın modu , tampon belleğin boyu vb. .
			
			"Sozcuk ve aciklama" adinda iki dizi tanımlıyoruz. Bunlar karakter tipinde 
				diziler. "Sozcuk" dosyamızın ismi olacak ; "aciklama" ise yaratacağımız 
				kelimenin anlamını oluşturacak. fflush(stdin) ‘i kullanmamızın sebebi ise, 
				tampon belleği boşaltmak. Eğer kullanmazsak bazı problemlerle karşılaşabiliriz. 
				En kötü ihtimal, gets(sozcuk) fonksiyonumuz işlemeyecektir, fflush(stdin) 
				kullanmak istemiyorsanız, sahte bir gets de kullanabilirsiniz (tampon belleği 
				boşaltmak için). O zaman sorunu halledebiliriz ama bilinçli bir davranışdan çok 
				bir kaçış yolu olarak kullanılabilir.
			
			Gets fonksiyonu ise klavyeden girilen karakterlerin, hepsini diziye 
				yerleştirir(dikkat edilmesi gereken husus, dizin uzunluğundan daha fazla 
				karakter girişinede izin verilmektedir. Eğer böyle bir durumla karşılaşılırsa, 
				dizi taşması olup, beklenmeyen hatalarla karşılaşabilir. Burada bir sözlük 
				programı yaptığımız için, tek kelimelerle çalıştığımız farzedilmiştir).
			
			fp=fopen(sozcuk,"wb") ; burada sozcuk dizinine girmiş olduğumuz sözcüğün ismine 
				sahip olan bir dosya, oluşturulmaktadır. wb ifademiz dosyayı, yoktan var 
				etmemizi sağlar. Bu moda açılan bir dosyaya, sadece yazım yapılır, okuma 
				yapılamaz. Şimdi, gets(aciklama) ile yukarıda da açıklandığı gibi klavyeden 
				karakter alıyoruz.
			
			fwrite(&aciklama,sizeof(aciklama),1,fp) ; bellekte bulunan bilgiyi dosyaya 
				yazmak için kullanmış, olduğumuz fonksiyondur. Genel kullanımı şöyledir : 
				fwrite(&x, sizeof(int),1,fp); x değişkeninin içerisindeki sayı, fp ile 
				belirtilen dosyaya yazılmaktadır. Bizim program parçacığımızda, fwrite’ın 
				yaptığı iş, özetle aciklama isimli değişkeni fp nin gösterdiği dosyaya, 
				yazmaktır.
			
			Açtığımız her dosyayı, kapatmak zorunda olduğumuz için fclose(fp) fonksiyonunu 
				kullanmaktayız( açılan her dosya kapatılmak zorundadır yoksa işletim sisteminin 
				özellikleriyle ilgili hatalara sebebiyet verebilir).
			
			Evet, ekle() fonksiyonumuz sayesinde, baştan varolmaya bir dosya oluşturup, 
				içine de sözcüğümüzün anlamını aktardık.
			
			
			Sıra, girdiğimiz sözcüğü(dosyayı) okumaya yarayan bizim oluşturacağımız oku() 
				fonksiyonunda:
			
			
				
					
						
							void oku(void)
								 
								{ 
								    clrscr();
								 
								    FILE *fp;
								 
								    char sozcuk[maks], aciklama[maks];
								 
								   
								 
								    fflush(stdin);
								 
								    printf("anlamini ogrenmek istediginiz sozcugu giriniz\n");
								 
								    gets(sozcuk);
								 
								    fp=fopen(sozcuk,"rbt");
								 
								    printf("girdiginiz sozcugun anlami\n");
								 
								    fread(&aciklama,sizeof(aciklama),1,fp);
								 
								    printf(" %s",aciklama);
								 
								    fclose(fp);
								 
								}  
							
						 | 
					 
				 
				 
				Sanırım bu fonksiyonu derinlemesine anlatamama gerek yok. Gördüğünüz üzere, 
				küçük bir iki değişiklikle, oluşturduğumuz dosyayı okutabiliyoruz.
			
			İlk göze çarpan değişiklik "rbt" kavramı. Burada dosyayı okumak için açıyoruz. 
				fread() de fwrite() ‘ın kardeşi diyebiliriz, aynı kalıp. Açtığımız dosyayı 
				kapatmayı unutmayalım.
			
			İŞİN ZOR KISMI BİTTİ!
			
			İşte main()’inmiz:
			
			
				
					
						
							void main()
								 
								{ 
								    while(gir!=999){
								 
								        clrscr(); 
								        printf("\n\n\n\t\t\t aspecden 
								V0.9 \n"); 
								        printf("\t\t\t Sözlük Programi\n"); 
								        printf("\t\t\t MENU\n"); 
								        printf("\t\t\t 1-) Sözcük ekle 
								\n"); 
								        printf("\t\t\t 2-) Sözcük Görüntüle 
								\n"); 
								        printf("\t\t\t cikis icin 999 
								\n"); 
								        scanf("%d",&gir); 
								        if(gir==999) 
								        { return; } 
								        else if(gir==1) 
								        { ekle(); getch(); } 
								        else if(gir==2) 
								        { oku(); getch(); } 
								        else printf("yanlis tusa bastiniz"); 
								    } 
								}
						 | 
					 
				 
		
			Programımız ve dosya işlemleri ile ilgili giriş bilgilerimizi tamamladık. Tek 
				eksiğimiz, dosya işlemleri ile yapılmış bu basit sözlük programını yazıp 
				derlemek.
			
			Bu yazımızda, kullandığımız fonksiyonlarla ilgili bildirimler ve genel kullanım 
				şekillerine, göz atalım :
			
			Bu bilgiler, sizin programı daha iyi anlamanızı ve fonksiyonları hakkında 
				bilginiz olmasını, sağlayacaktır.
			
			İlk olarak, gets() fonksiyonunu ele alalım: Bildirimi : char *gets(char *x);
			
			Gets, karakter katarlarını okumak için kullanılır ve x sembolü ile gösterilen 
				yere, bilgileri aktarır. Burada dikkat edilmesi gereken husus, sonuna NULL 
				eklenmesidir! Bizim programımızda kullandığımız şekli ile bir dizi içerisine 
				okunan bilgileri yerleştirir.stdio.h başlık dosyasında tanımlanmıştır.
			
			fwrite fonksiyonumuzun bildirimi ise şu şekildedir: Bildirimi : size_t 
				fwrite(const void *buf,size_t X,size_t z, FILE *fp);
			
			Dosyaya toplu yazım yapmak için kullanılır. fp ile belirtilen dosyaya yazım 
				yapılır. X sekizli uzunlukta buf ile işaret edilen bir dizinin, ilk "z" tane 
				elemanını, fp ile belirtilmiş olan dosyaya yazmaktadır. stdio.h başlık 
				dosyasında tanımlanmıştır.
			
			fread fonksiyonu, ise fwrite fonksiyonu ile aynı kalıptadır bilmemiz gerekn tek 
				şey ise bu sefer yazım değil toplu okuma yapılmaktadır.
			
			fflush(); Bildirimi: int fflush(FILE *fp);
			
			
				Umarım sizin için yararlı bir yazı olmuştur. Yaratıcılığınızı kullanmayı 
				unutmayın! Geliştirdiğiniz dosya işlemleri ile yapmış olduklarınızı görmek 
				isterim [email protected] adresine yazı ile ilgili eleştirilerinizi ve 
				geliştirmiş olduğunuz programları gönderebilirsiniz. Görüşmek üzere!
		
                
                Makale: 
                Basit Dosya İşlemleri C ve Sistem Programlama Volkan Atasever 
             |