CodeBlanks Logo Icon CodeBlanks

fread ve fwrite

  • C kursu
  • Orta seviye
  • Ders 51/116
  • 5 dk

fread ve fwrite ile ikili okuma/yazma öğrenirsin.

fread ve fwrite

fread ve fwrite, dosyadan ve dosyaya ikili veri (binary) okuyup yazmanın temel yoludur. Metin değil yapılandırılmış veri için kullanılırlar; örneğin diziler ve struct'lar.

Örnek: int arr[3] = {1, 2, 3}; fwrite(arr, sizeof(int), 3, f);. Bu, 3 tamsayıyı dosyaya yazar. fread(arr2, sizeof(int), 3, f); ile geri okur. Parametreler: veri işaretçisi, eleman boyu, eleman sayısı, dosya. İkili mod için "wb" ve "rb" modları kullanılır; bu, platformlar arası tutarlılık için önemlidir.

fwrite parametreleri

fwrite'ın dört parametresi vardır: veri işaretçisi, eleman boyu, eleman sayısı ve dosya. Bu yapı, tek seferde birden çok elemanı verimli yazmayı sağlar.

Örnek: int x = 42; fwrite(&x, sizeof(int), 1, f);. Tek bir tamsayı yazar. Veya int arr[10]; fwrite(arr, sizeof(int), 10, f); on tamsayı yazar. sizeof(int) çoğu platformda 4'tür; ama bunu elle yazmak yerine sizeof kullanmak taşınabilirliği korur. fread aynı parametre yapısına sahiptir; okunan eleman sayısını döndürür.

Uygulama İkili dizi yaz ve geri oku

int arr[3] = {10, 20, 30}; tanımla. FILE *f = fopen("nums.bin", "wb"); ile aç (NULL denetle). fwrite(arr, sizeof(int), 3, f); ile yaz, fclose(f);. int arr2[3]; tanımla; f = fopen("nums.bin", "rb"); ile yeniden aç (NULL denetle). fread(arr2, sizeof(int), 3, f); ile oku, fclose(f);. printf("%d %d %d\n", arr2[0], arr2[1], arr2[2]); ile yazdır.

Başlangıç kodu

main.c
#include <stdio.h>

// fopen ile nums.bin'yi ikili yazma modunda aç
// int arr[3] = {10, 20, 30} tanımla, fwrite ile yaz
// fclose, sonra okuma modunda yeniden aç
// fread ile oku, printf ile yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int main(void) {
    int arr[3] = {10, 20, 30};
    FILE *f = fopen("nums.bin", "wb");
    if (f == NULL) return 1;
    fwrite(arr, sizeof(int), 3, f);
    fclose(f);

    int arr2[3];
    f = fopen("nums.bin", "rb");
    if (f == NULL) return 1;
    fread(arr2, sizeof(int), 3, f);
    fclose(f);

    printf("%d %d %d\n", arr2[0], arr2[1], arr2[2]);
    return 0;
}

Beklenen çıktı

10 20 30

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 fread/fwrite kavramlarını eşle

Kavram Anlamı
fwrite İkili yazma
fread İkili okuma
sizeof(int) Eleman boyu
3 Eleman sayısı

2 fwrite çağrısını tamamla

Soru
int x = 42;
fwrite(&x, sizeof(int), ____, f);
Cevap
int x = 42;
fwrite(&x, sizeof(int), 1, f);

Açıklama: Tek eleman yazmak için count 1 olur.

3 fwrite'ın ikinci parametresi neyi belirtir?

  • Her elemanın boyu Doğru cevap
  • Toplam bayt
  • Tampon işaretçi
  • Dosya adı

Açıklama: İkinci parametre her elemanın boyudur (sizeof(int) gibi).

Orta seviye bölümündeki tüm dersler