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
#include <stdio.h>
#include <stdlib.h>
// farewell fonksiyonunu yaz
// atexit ile kaydet
// exit çağır
int main(void) {
return 0;
}Örnek çözüm
#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ı
atexit(____);
exit(0);
atexit(farewell);
exit(0);
Açıklama: atexit ile farewell işlevi kaydedildi.