11.4. Dönüşdeğerleri

Sistem fonksiyonlarıdönüşdeğerleri alınmadan bir şey ifade etmeyecektir.Dosya açtığımızda dosya numarasıdönmesi , okuma işleminde okunan byte sayısıvb.

Ek olarak sistem bir hata olduğunda bize bildirmelidir : Bir dosya yok ise , sistem kaynaklarıyetersiz ise , yanlışparametre gönderildiğinde gibi

11.4.1. Man sayfaları

Çok eskilerden beri Unix sistemleri altında sistem çağrıları hakkında bilgi kaynağıkullanım (manual) sayfalarıdır. Bunlara man komutu ile ulalışılabilmesinden ötürü man pages olarak adlandırılır.FreeBSD man sayfalarısistem çağrılarını2. yada 3. bölümde açıklamaktadır.

Mesela open(2) man sayfasından :

If successful,

 open() 
returns a non-negative integer, termed a file descriptor. It returns -1 on failure, and sets errno to indicate the error.

Assembly programcısıeğer Unix ve FreeBSD dünyasında yeni ise şu soruyu soracaktır :

errno
nerede , nasıl ulaşabilirim ?

Not: Man sayfalarındaki gösterilen bilgiler C programcılarıiçin uygundur . Assembly programcılarıbundan daha fazla bilgiye ihtiyaç duyar.

11.4.2. Dönüşdeğerleri nerededir ?

Ne yazık ki bunun kesin bir cevabıyoktur. Çoğu sistem çarısı için EAX yazmacıolsada hepsi için değildir. En güzel yöntem çalışırken önce EAX yazmacına bakmak orada değilse ek aramalar yapmak olacaktır.

Not: Şimdiye kadar çalıştığımız fonksiyonların hepsi EAX yazmacına dönüşyaptısadece bir tanesi

        EDX : SYS_fork 
bunlardan değildi. Ama yinede sistem çağrılarının tamamınıkullanmışdeğiliz.

İpucu: Eğer burada yada herhangi başka bir yerde aklınızdaki soruların cevabını bulamadıysanız libc kütüphanesi üzerinde çalışarak çekirdek ile nasıl bir etkileşim içinde olduğunu inceleyebilirsiniz.

11.4.3. Errno nerededir ?

Aslında hiç bir yerde...

errno C dilinin içinde olan bir kavram Unix çekirdeğinde değil. Eğer çekirdek servislerine direk erişim yapıyorsanız hata kodu EAX içine dönülecektir yani hata olmadığında fonksiyonların dönüş değerlerinin konulduğu yere.

Bu çok mantıklıdır , eğer bir hata oluşmazsa hata kodu olmayacaktır ve eğer bir hata oluşursa fonksiyon geri dönüşdeğeri olmayacaktır. Yani EAX yazmacıbu ikisinden birini taşıyacaktır.

11.4.4. Hatanın oluştuğunu tesbit etmek

Eğer standart FreeBSD düzenini kullanıyorsanız 'carry flag' olarak adlandırılan bir bit, hata olmadığında 0 hata durumunda ise 1 değerini alır.

Linux emülasyon modunda ise EAX değeri sıfırdan büyük bir sayı ise başarılıdurumu sıfırdan küçük ise hatalıdurumu belirtir.Bir başka deyişle -errno.