C Öğreticisi 20 (Dosya Açıp Kapatma)

Bu yazılar www.tutorialspoint.com/cprogramming/ adresindeki yazı dizilerinin çevirileridir.

Son bölümde C programlama dili tarafından kullanılan standart giriş ve çıkış cihazları açıklanmıştır. Bu bölüm, C programcılarının veri depolama için nasıl metin veya ikili dosyalar oluşturabileceğini, açabileceğini, kapatabileceğini kapsar.

Bir dosya, metin dosyası veya ikili dosya olmasına bakılmaksızın bir bayt dizisini temsil eder. C programlama dili, depolama cihazlarınızdaki dosyaları işlemek için üst düzey işlevlere ve düşük düzeyli (işletim sistemi düzeyinde) çağrılara erişim sağlar.

Dosyayı Açmak

Yeni bir dosya oluşturmak veya mevcut bir dosyayı açmak için fopen () fonksiyonunu kullanabilirsiniz. Bu çağrı, akışı kontrol etmek için gerekli tüm bilgileri içeren FILE(dosya) türünde bir nesne başlatır.

Bu fonksiyonun prototipi aşağıdaki gibidir -

FILE *fopen(sabit char * dosyaAdı, sabit char * erişim modu );

Burada, dosya adı, dosyanızı adlandırmak için kullanacağınız bir dize değişmezidir ve erişim modu aşağıdaki değerlerden birine sahip olabilir -

İkili dosyaları işleyecekseniz, yukarıda belirtilenler yerine aşağıdaki erişim modlarını kullanırsınız -

“rb”, “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b”

Dosyayı Kapatmak

Bir dosyayı kapatmak için fclose () fonksiyonunu kullanın. Bu fonksiyonun prototipi -

int fclose( FILE *fp );

Fclose (-) fonksiyonu başarı durumunda sıfır veya dosyayı kapatırken bir hata varsa EOF döndürür. Bu fonksiyon aslında arabellekte bekleyen verileri temizler, dosyayı kapatır ve dosya için kullanılan belleği serbest bırakır.

EOF stdio.h başlık dosyasında tanımlanan bir sabittir.

C standart kitaplığı tarafından bir dosyayı, karakter karakter veya sabit uzunluklu dize biçiminde bir dosyayı okumak ve yazmak için sağlanan çeşitli fonksiyonlar vardır.

Bir Dosyaya Yazmak

Bir akışa tek tek karakter yazmak için en basit komut aşağıdadır -

int fputc( int c, FILE *fp );

Fputc () fonksiyonu, c bağımsız değişkeninin karakter değerini fp tarafından başvurulan çıkış akışına yazar. Başarıyla sonuçlanırsa yazılı karakteri, bir hata varsa EOF’u döndürür. Bir akışa boş sonlandırılmış bir dize yazmak için aşağıdaki komutları kullanabilirsiniz -

int fputs( const char *s, FILE *fp );

Fputs () fonksiyonu, s dizesini fp tarafından başvurulan çıkış akışına yazar. Başarı durumunda negatif olmayan bir değer döndürür, herhangi bir hata durumunda EOF döndürülür. Bir dosyaya dize yazmak için int fprintf (FILE * fp, const char * format, …) fonksiyonunu da kullanabilirsiniz. Aşağıdaki örneği deneyin.

/tmp dizininizin kullanılabilir olduğundan emin olun. Değilse, devam etmeden önce bu dizini makinenizde oluşturmanız gerekir.

#include <stdio.h>

main() {

FILE *fp;

fp = fopen(“/tmp/test.txt”, “w+”);

fprintf(fp, “Bu fprintf fonksiyonunu deneme yazısıdır\n”);

fputs(“Bu fputs fonksiyonunu deneme yazısıdır\n”, fp);

fclose(fp);

}

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, /tmp dizininde yeni bir test.txt dosyası oluşturur ve iki farklı fonksiyon kullanarak iki satır yazar. Bir sonraki bölümde bu dosyayı okuyalım.

Dosyayı Okumak

Aşağıda, bir dosyadan tek bir karakteri okumak için en basit komut verilmiştir -

int fgetc( FILE * fp );

Fgetc () işlevi, giriş dosyasından fp tarafından başvurulan bir karakteri okur. Dönüş değeri okunan karakterdir veya herhangi bir hata durumunda EOF döndürür. Aşağıdaki fonksiyon bir akıştan bir dize okunmasına izin verir -

char *fgets( char *buf, int n, FILE *fp );

Fgets () fonksiyonu, fp tarafından başvurulan giriş akışından n-1 karaktere kadar okur. Dizeyi sonlandırmak için boş bir karakter ekleyerek, okunan dizeyi arabellek arabelleğine kopyalar.

Bu fonksiyon, maksimum karakter sayısını okumadan önce yeni satır karakteri ‘\ n’ veya EOF dosyasının sonuna rastlarsa, yalnızca yeni satır karakteri de dahil olmak üzere o noktaya kadar okunan karakterleri döndürür.

Bir dosyadan dizeleri okumak için int fscanf (FILE * fp, const char * format, …) işlevini de kullanabilirsiniz, ancak ilk boşluk karakteriyle karşılaştıktan sonra okumayı durdurur. Bir dosyadan dizeleri okumak için int fscanf (FILE * fp, const char * format, …) fonksiyonunu da kullanabilirsiniz, ancak ilk boşluk karakteriyle karşılaştıktan sonra okumayı durdurur.

#include <stdio.h>

main() {

FILE *fp;

char buff[255];

fp = fopen(“/tmp/test.txt”, “r”);

fscanf(fp, “%s”, buff);

printf(“1 : %s\n”, buff );

fgets(buff, 255, (FILE*)fp);

printf(“2: %s\n”, buff );

fgets(buff, 255, (FILE*)fp);

printf(“3: %s\n”, buff );

fclose(fp);

}

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, önceki bölümde oluşturulan dosyayı okur ve aşağıdaki sonucu verir -

1: Bu

2: Bu fprintf fonksiyonunu deneme yazısıdır

3: Bu fputs fonksiyonunu deneme yazısıdır

Burada neler olduğu hakkında biraz daha ayrıntı görelim. İlk olarak, fscanf () salt okunur Bu, bundan sonra bir boşlukla karşılaştığı için ikinci çağrı, satır sonuna kadar kalan satırı okuyan fgets () içindir. Son olarak, son çağrı fgets () ikinci satırı tamamen okur.

İkili Girdi Çıktı Fonksiyonları

İkili giriş ve çıkış için kullanılabilecek iki fonksiyon vardır -

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

Bu fonksiyonların her ikisi de, genellikle diziler veya structlar olmak üzere bellek bloklarını okumak veya yazmak için kullanılmalıdır.

https://www.tutorialspoint.com/cprogramming/c_file_io.htm

Last updated