IPC Mekanizmalarındaki Ortak Bazı Özellikler
Yukarıdaki 3 IPC mekanizması bir dosya biçiminde kullanılmamaktadır. Bu nedenle IPC
nesnelerinin birer ismi yoktur. Win32 sistemlerinde process’ler arası haberleşme
yöntemlerindeki nesneler bir isim ile ifade edilirler. Win32’de tipik olarak bir process bir isim
altında IPC nesnesini oluşturur, diğeri de aynı ismi vererek onu kullanır. Verilen ismin
tesadüfen kullanılmakta olan bir IPC nesne ismi ile çakışması durumu üzerinde durulmayacak
biçimde zayıf bir olasılıktır. Halbuki UNIX sistemlerinde iki process’in aynı IPC nesnelerini
görmeleri isim yoluyla değil, anahtar denilen bir sayı yoluyla yapılmaktadır. UNIX
sistemlerinde tipik olarak iki process aynı anahtar sayı üzerinde anlaşırlar, böylece iki process
de IPC nesnesini yaratır. Bu nesne aynı nesne olur. Şüphesiz UNIX sistemlerinde de anahtar
sayı bakımından bir çakışma söz konusu olabilir. Bu tür bir çakışma önemsenmemelidir.
Üç IPC mekanizması için IPC nesnesi elde etmeye yönelik üç get fonksiyonu vardır.
Fonksiyonlarda msg ön eki mesaj kuyruğu için, sem ön eki semafor için ve shm ön eki
paylaşılan bellek alanları için kullanılmaktadır. Örneğin IPC nesnesi elde eden fonksiyonlar
msgget, semget ve shmget biçimindedir. get fonksiyonlarının genel yapısı şöyledir:
int xxxget(key_t key, ......);
Üç get fonksiyonunun da birinci parametreleri key_t türündendir. key_t türü tipik olarak int
ya da long biçimindedir. Bu fonksiyonların geri dönüş değerleri yaratılan ya da açılan IPC
nesnesine ilişkin handle değeridir (UNIX dünyasında handle yerine ID değeri denilmesi daha
yaygındır). Örneğin iki process'ler ortak bir mesaj kuyruğu yoluyla haberleşecek olsunlar.
Ortak bir anahtar değerinde anlaşırlar. İki process de msgget fonksiyonunu bu anahtar değer
ile çağırır. Böylece iki process de aynı nesneye ilişkin bir ID değeri elde ederler. Diğer
fonksiyonlar da bu ID değerini kullanarak haberleşmeyi sağlarlar. İki process’in ID değerleri
farklı olabilir, ama aynı anahtar ‘x’ sayıdan hareketle nesneyi yarattıklarından aynı nesneyi
görürler. UNIX sistemlerinde de tıpkı Win32 sistemlerinde olduğu gibi nesneler türlerine göre
birbirlerinden ayrılmaktadır. Yani, İki farklı türden IPC nesnesi aynı anahtarı kullanabilir.
Örneğin process’lerden biri 18362 anahtar değeri ile bir mesaj kuyruğu yaratıyor olsun, başka
bir process aynı anahtar değeri ile bir semafor yaratabilir. Bunlar farklı nesneler olduğu için
anahtar değerler karışmaz.
UNIX/Linux IPC nesneleri process’lerden bağımsız olarak yaşarlar. İsimli pipe’larda olduğu
gibi bir IPC nesnesini kullanan hiç bir process kalmazsa IPC nesnesi de otomatik olarak
silinmez. IPC nesnelerinin yaratılıp silinmesi ayrıca yapılması gereken bir işlemdir. IPC
nesneleri de tamamen dosyalar gibi OWNER-GROUP-OTHER erişim haklarına sahiptir. IPC
nesneleri bu bakımdan dosyalara da benzemektedir.
Bir IPC nesnesi yaratıldıktan sonra ID değeri belirtilerek kullanılır. get fonksiyonlarının bir
parametreleri daha ortaktır. Bu ortak parametre flag ismi ile belirtilir. flag değeri tamamen
dosyalardaki open fonksiyonunun açış modu parametresiyle benzer biçimde kullanılır. Bu
parametre de üç oktal digit erişim bilgisi ile IPC_CREAT, IPC_EXCL değerleri or’lanır.
Örneğin flag değeri şöyle oluşturulabilir:
IPC_CREAT | 0666
flag değeri ile anahtar değeri arasındaki ilişki şöyledir:
1) Anahtar değer olarak IPC_PRIVATE girilirse flag parametresi default IPC_CREAT
anlamına gelir ve bu durumda fonksiyon kullanılmayan bir anahtar değeri ile IPC nesnesi
yaratılır.
2) IPC_CREAT ile IPC_EXCL aynı anda kullanılabilir. Bu durum tıpkı dosyalarda olduğu
gibi yoksa yarat, ama varsa “açma error ver geridön” anlamına gelir. Programcı yeni bir IPC
nesnesi yarattığından böyle emin olabilir.
ftok Fonksiyonu
Bu fonksiyon yeni bir anahtar numarası elde etmek için bazen kullanılmaktadır.
key_t ftok(char *pathname, char proj);
Eğer herkes ftok fonksiyonunu kullanırsa anahtar değerinin tek olarak elde edileceği garanti
edilebilir. Fonksiyonun birinci parametresi bir dosya ismidir, ikinci parametresi ise bir
karakterdir. Fonksiyon birinci parametresiyle verilen dosyanın i-node numarasından
faydalanarak ikinci parametresiyle belirtilen ascii kodunu bu sayıya ekleyerek bir sayı
oluşturur. Şüphesiz sistemde herkes ftok fonksiyonunu kullanırsa çakışma olasılığı neredeyse
kalmaz. Ancak ftok fonksiyonunun şöyle bir avantajı vardır; örneğin iki process (client ve
server process’leri olsun) aynı bir dosya isminde anlaşıp aynı sayıyı elde edebilirler. Eğer bir
çakışma olursa hiç programa dokunmadan o dosyanın silinip yeniden yaratılması gibi bir
yöntem ile i-node numarası değiştirilerek başka bir sayıyı deneyebilirler.