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
#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
#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
int x = 42;
fwrite(&x, sizeof(int), ____, f);
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).