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
#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
#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ı
char buf[8];
ssize_t n = ____(fd, buf, 7);
char buf[8];
ssize_t n = read(fd, buf, 7);
Açıklama: read, tanıtıcıdan arabelleğe okur.