08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

exit, abort atexit İşlevleri<br />

Bir C programının çalışması main işlevinden başlar, main işlevinin sonunda, ya da bu<br />

işlevin geri dönüş değeri üretmesiyle, sonlanır. Program, eğer bir başka işlevin<br />

çalıştırılması sırasında sonlandırılmak istenirse, standart exit ya da abort işlevleri<br />

çağrılabilir.<br />

exit İşlevi<br />

Standart bu işlev stdlib.h başlık dosyası içinde bildirilmiştir:<br />

void exit(int status);<br />

İşlev, çalıştırılmakta olan programı sonlandırmadan önce aşağıdaki temizlik işlerini yapar:<br />

i) atexit işleviyle daha önce kayıt edilmiş işlevleri kayıt edilmelerine göre ters sıra içinde<br />

çağırır.<br />

ii) Yazma amaçlı açılmış tüm dosyaların tampon alanlarını (buffer) boşaltır (flush). Açık<br />

durumda olan tüm dosyaları kapatır.<br />

iii) tmpfile işleviyle açılmış olan dosyaları siler.<br />

iv) Kontrolu, programın çalıştırıldığı sisteme, başarı durumunu ileten bir bilgiyle geri verir.<br />

İşleve gönderilen değer 0 ya da EXIT_SUCCESS simgesel değişmezi ise, işlev, sisteme<br />

programın başarı nedeniyle sonladırıldığı bilgisini iletir. İşleve gönderilen argüman 1 ya<br />

da EXIT_FAILURE simgesel değişmezi ise, işlev, sisteme programın başarısızlık nedeniyle<br />

sonlandırıldığı bilgisini iletir.<br />

abort İşlevi<br />

Standart bu işlev stdlib.h başlık dosyası içinde bildirilmiştir:<br />

void abort(void);<br />

İşlev bir C programını olağandışı biçimde sonlandırmak amacıyla çağrılır. Bir C programı<br />

abort işlevine yapılan çağrı ile sonlandırıldığında, atexit işleviyle daha önce kayıt edilmiş<br />

işlevler çağrılmaz. abort çağrısı ile programın sonlanmasından önce bazı temizlik<br />

işlemlerinin yapılıp yapılmayacağı derleyicinin seçimindedir.<br />

Standart assert makrosu içinde de bu işlev çağrılır.<br />

atexit İşlevi<br />

Standart bu işlevin bildirimi yine stdlib.h başlık dosyası içindedir.<br />

int atexit (void (*func)(void));<br />

atexit işlevi ile, program sonlandığında ya da exit işlevi çağrıldığında, çağrılması istenen<br />

bir işlev kaydedilir. Program normal dışı yollarla, örneğin abort ya da raise işleviyle<br />

sonlandırıldığında, kaydedilen işlevler çağrılmaz.<br />

atexit işleviyle en az 32 işlev kaydedilebilir.<br />

İşlevin parametresi, kaydedilecek işlevin adresidir. İşlevin geri dönüş değeri işlemin<br />

başarı durumunu iletir. 0 geri dönüş değeri, işlemin başarısını, 0 dışı bir değer işlemin<br />

başarısızlığını gösterir.<br />

Kaydedilen bir işlevi kayıttan çıkarmanın bir yolu yoktur.<br />

Kaydedilen işlevler kaydedildikleri sıra ile ters sırada çağrılırlar. Bir işlev birden fazla kez<br />

kaydedilebilir. Bu durumda birden fazla kez çalıştırılır.<br />

321

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!