CodeBlanks Logo Icon CodeBlanks

read ve write

  • C kursu
  • İleri seviye
  • Ders 5/83
  • 5 dk

read ve write ile düşük seviyeli I/O öğrenirsin.

read ve write

read(fd, buf, n), dosyadan en fazla n bayt okur ve buf'a yazar. Dönüş değeri okunan bayt sayısıdır; dosya sonunda 0, hatada -1.

write(fd, buf, n), buf'daki n baytı dosyaya yazar. Dönüş değeri yazılan bayt sayısıdır. İkisi de ssize_t döndürür. Önemli: read istenen sayıdan az bayt döndürebilir; bu bir hata değildir. Tam okuma için döngü kurman gerekir.

Arabellek ve döngü

read ve write bir arabellek (buffer) üzerinde çalışır. Arabellek, verinin geçici olarak tutulduğu bellek bölgesidir; genelde bir char dizisidir.

Tüm veriyi tek seferde okuyamayabilirsin. Bu yüzden bir döngü içinde read çağırıp her seferinde kaç bayt okunduğunu toplarsın. write için de aynı: yazılan bayt, istenenden az olabilir. Üst seviye fread bunu otomatik yapar ama POSIX seviyesinde sen yönetirsin.

Uygulama write ve bayt sayısı

const char *msg = "Merhaba\n"; tanımla. ssize_t n = write(1, msg, 8); ile stdout'a yaz. Sonra printf("%d\n", (int)n); ile yazılan bayt sayısını yazdır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <unistd.h>

// msg tanımla
// write ile yaz ve n'e ata
// n'i yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <unistd.h>

int main(void) {
    const char *msg = "Merhaba\n";
    ssize_t n = write(1, msg, 8);
    printf("%d\n", (int)n);
    return 0;
}

Beklenen çıktı

Merhaba
8

Soru ve cevaplar

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

1 I/O kavramlarını eşle

Kavram Anlamı
write Veri gönderir
read Veri alır
buffer Geçici arabellek
ssize_t İmzalı boyut türü

2 read başarılı okunan bayt sayısını nasıl döndürür?

  • ssize_t olarak Doğru cevap
  • void olarak
  • char olarak
  • float olarak

Açıklama: read ssize_t döndürür; bu imzalı bir tamsayıdır.

3 read çağrısı

Soru
char buf[8];
ssize_t n = ____(fd, buf, 7);
Cevap
char buf[8];
ssize_t n = read(fd, buf, 7);

Açıklama: read, tanıtıcıdan arabelleğe okur.

İleri seviye bölümündeki tüm dersler