CodeBlanks Logo Icon CodeBlanks

Syscall

Sistem çağrıları (syscall) kavramını öğrenirsin.

Sistem çağrısı (syscall)

Sistem çağrısı (syscall), kullanıcı programının çekirdekten hizmet istemesidir. Her syscall bir numarayla tanımlanır: read, write, open, close yaygın örneklerdir.

C'de <unistd.h> bu sarmalları bildirir. Çağrı yapılınca CPU trap yapar; çekirdek ilgili hızmeti yürütür ve dönüş değerini kullanıcıya verir. Hata durumunda dönüş -1 olur ve errno ayarlanır. Çekirdek syscall tablosu her komut numarasını bir işleve bağlar; bu tablo mimariye göre değişir.

Syscall numaraları ve errno

Her syscall'ın bir numarası vardır. Linux x86-64'te SYS_read = 0, SYS_write = 1, SYS_open = 2 biçimindedir. <sys/syscall.h> bu sabitleri tanımlar.

Sarmal fonksiyonlar (read, write) bu numaraları dolaylı kullanır. Doğrudan syscall(SYS_read, ...) biçiminde de çağrılabilir; ancak taşınabilirlik için sarmal tercih edilir. Hata durumunda errno durumu açıklar; strerror ile metne çevrilir. Çekirdek bu numaraları sabit tutar; ABI uyumu için değişmez.

Uygulama Syscall adlarını yazdır

void print_syscall(const char *name) fonksiyonunu tanımla; gövdesi printf("syscall: %s\n", name); olsun. main içinde bu fonksiyonu "read", "write", "open" ile çağır.

Başlangıç kodu

main.c
#include <stdio.h>

// print_syscall fonksiyonunu tanımla
// read, write, open için çağır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

void print_syscall(const char *name) {
    printf("syscall: %s\n", name);
}

int main(void) {
    print_syscall("read");
    print_syscall("write");
    print_syscall("open");
    return 0;
}

Beklenen çıktı

syscall: read
syscall: write
syscall: open

Soru ve cevaplar

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

1 Syscall sarmallarını amacına eşle

Kavram Anlamı
read Veri okur
write Veri yazar
open Dosya açar
close Tanıtıcı kapatır

2 Aşağıdakilerden hangisi bir sistem çağrısıdır?

  • printf
  • read Doğru cevap
  • malloc
  • fopen

Açıklama: read doğrudan bir sistem çağrısıdır; printf ve fopen libc sarmallarıdır.

3 syscall çağrısını tamamla

Soru
long ret = syscall(____, 1, buf, n);
Cevap
long ret = syscall(SYS_write, 1, buf, n);

Açıklama: SYS_write numarası yazma sistem çağrısını seçer.

Uzman bölümündeki tüm dersler