CodeBlanks Logo Icon CodeBlanks

exit ve _exit

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

exit ve _exit arasındaki farkı öğrenirsin.

exit ve _exit

exit(status), süreci sonlandırır. Önce atexit ile kaydedilen işlevleri çağırır, sonra stdio arabelleklerini boşaltır ve son olarak çekirdekten çıkar.

_exit(status) ise doğrudan çekirdek çıkışı yapar; arabellekleri boşaltmaz ve atexit işlevlerini çağırmaz. fork sonrası çocukta exec öncesi _exit kullanmak daha güvenlidir; çünkü stdio arabellekleri ebeveynle paylaşılabilir.

atexit işlevleri

atexit(fn), sürecin normal sonlanmasında çağrılacak bir işlev kaydeder. exit ile çıkıldığında bu işlevler, kayıt sırasının tersinde çağrılır.

En fazla 32 işlev kaydedebilirsin (sistemler arası değişir). _exit veya sinyalle sonlanma atexit işlevlerini çağırmaz. Bu yüzden temizlik işlerinin atexit ile kaydedilmesi güvenli bir yöntemdir: return ile de exit ile de çalışırlar.

Uygulama atexit ile temizlik

void farewell(void) işlevi yaz; içinde printf("görüşürüz\n");. main içinde atexit(farewell); ile kaydet. printf("merhaba\n"); yaz ve exit(0); ile çık.

Başlangıç kodu

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

// farewell fonksiyonunu yaz
// atexit ile kaydet
// exit çağır

int main(void) {
    return 0;
}

Örnek çözüm

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

void farewell(void) {
    printf("görüşürüz\n");
}

int main(void) {
    atexit(farewell);
    printf("merhaba\n");
    exit(0);
}

Beklenen çıktı

merhaba
görüşürüz

Soru ve cevaplar

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

1 Çıkış fonksiyonlarını eşle

Kavram Anlamı
exit Arabellek boşaltır
_exit Anında çıkar
atexit İşlev kaydeder
return İşlevi bitirir

2 _exit ile exit arasındaki fark nedir?

  • _exit geri döner
  • exit daha hızlıdır
  • _exit arabellek boşaltmaz Doğru cevap
  • exit sinyal gönderir

Açıklama: _exit doğrudan çekirdek çıkışı yapar, arabellek boşaltmaz.

3 atexit kaydı

Soru
atexit(____);
exit(0);
Cevap
atexit(farewell);
exit(0);

Açıklama: atexit ile farewell işlevi kaydedildi.

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