Bu bölümde bir sürecin nezaket değerinin nasıl okunabileceğinden ve nasıl belirtilebileceğinden bahsedilecektir. Bu sembollerin tamamı
sys/resource.h başlık dosyasında bildirilmiştir.
İşlev ve makro isimleri POSIX tarafından tanımlanmıştır. POSIX'te ve bu kılavuzda isimlendirme için "öncelik" (priority) terimi kullanılmış olmasına rağmen işlevler aslında nezaket değerleri ile işlem yaparlar.
Geçerli nezaket değerleri çekirdeğe bağlı olmasına rağmen, genellikle -20 ile 20 arasındadır. Daha düşük bir nezaket değeri daha yüksek önceliğe karşılıktır. Öncelik değerlerinin aralığını belirleyen sabitler şunlardır:
- PRIO_MIN
Geçerli en düşük nezaket değeri.
- PRIO_MAX
Geçerli en yüksek nezaket değeri.
int getpriority | (int sınıf,
int kimlik) |
işlev
Bir süreç kümesinin nezaket değerini döndürür; sınıf ve kimlik hangisi olduğunu belirtir (aşağıya bakınız). Eğer belirtilen süreçlerin hepsi aynı nezaket değerine sahip değilse, işlev bunların içinden en düşük nezaket değerini döndürür.
İşlev başarılı olursa 0 ile döner. Hata oluşmuşsa -1 döner ve ERRNO değişkenine hata durumu atanır. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
- ESRCH
sınıf ve kimlik birlikte mevcut herhangi bir süreçle uyuşmuyor.
- EINVAL
sınıf değeri geçersiz.
Dönen değer -1 olduğundan bunun bir başarısızlık mı yoksa bir nezaket değeri mi olduğunu anlayabilmek için tek yol getpriority çağrısından önce errno değişkenine 0 değeri atamaktır. Çağrının ardından errno != 0 kullanarak başarısızlık sınaması yapabilirsiniz.
int setpriority | (int sınıf,
int kimlik,
int nezaket) |
işlev
Bir süreç kümesinin nezaket değerini nezaket değerine ayarlar;sınıf ve kimlik hangisi olduğunu belirtir (aşağıya bakınız).
İşlev başarılı olursa 0 ile döner. Hata oluşmuşsa -1 döner. Aşağıdaki errno hata durumları bu işlev için tanımlanmıştır:
- ESRCH
sınıf ve kimlik birlikte mevcut herhangi bir süreçle uyuşmuyor.
- EINVAL
sınıf değeri geçersiz.
- EPERM
Çağrı, sahibi çağıran süreçten farklı bir kulllanıcıya ait bir sürecin nezaket değerini değiştirmeye çalışıyor (yani, hedef sürecin gerçek ya da etkin kullanıcı kimliği işlevi çağıran sürecin ektin kullanıcı kimliği ile aynı değil) ve işlevi çağıran süreç CAP_SYS_NICE yetkisine sahip değil.
- EACCES
Çağrı daha düşük bir nezaket değeri isteği yaptı ama sürecin CAP_SYS_NICE yetkisi yok.
sınıf ve kimlik argümanları birlikte ilgilendiğiniz süreç kümesini belirtirler. sınıf için olası değerler şunlardır:
- PRIO_PROCESS
Belirli bir süreç. kimlik sürecin süreç kimliğidir.
- PRIO_PGRP
Belirli bir süreç grubundaki bütün süreçler. kimlik süreç grup kimliğidir.
- PRIO_USER
Belirli bir kullanıcıya ait olan tüm süreçler (yani, gerçek kullanıcı kimliği kullanıcı ile aynı olan süreçler). kimlik kullanıcının kullanıcı kimliğidir.
Eğer kimlik değeri sıfırsa, bu çağıran süreci belirtir, süreç grubu ya da sürecin sahibi sınıf ile belirtilir.
Çağıran sürecin nezaket değerini artış kadar arttırır. İşlev başarılı olursa yeni nezaket değeri ile döner. -1 dönüş değeri ise bir hata oluştuğunu gösterir. Bu durumda errno değişkenine setpriority işlevindeki değerler atanır.
nice işlevine eşdeğer bir işlev tanımı:
int
nice (int artis)
{
int sonuc, eski = getpriority (PRIO_PROCESS, 0);
sonuc = setpriority (PRIO_PROCESS, 0, eski + artis);
if (sonuc != -1)
return eski + artis;
else
return -1;
}