UNIX etki alanı soketleri ve FIFO, uygulamalarının bir bölümünü paylaşabilir; ancak kavramsal olarak çok farklılar. FIFO çok düşük seviyede çalışır. Bir işlem boruya bayt yazar, diğeri ondan okur. Bir UNIX etki alanı soketi, bir TCP / IP soketi ile aynı davranışa sahiptir.
Bir soket çift yönlüdür ve aynı anda birçok işlem tarafından kullanılabilir. Bir işlem aynı soket üzerindeki birçok bağlantıyı kabul edebilir ve aynı anda birkaç müşteriye katılabilir. Çekirdek her seferinde yeni bir dosya tanıtıcısı sunar connect(2)
veya accept(2)
sokette çağrılır. Paketler her zaman doğru işleme gidecektir.
Bir FIFO'da bu imkansız olurdu. İki yönlü iletişim için iki FIFO'ya ihtiyacınız var ve müşterilerinizin her biri için bir çift FIFO'ya ihtiyacınız var. Seçici bir şekilde yazma veya okuma yolu yoktur, çünkü iletişim kurmak için çok daha ilkel bir yoldur.
Anonim borular ve FIFOlar çok benzer. Aradaki fark, isimsiz boruların dosya sistemindeki dosyalar olarak bulunmaması dolayısıyla hiçbir işlem yapamaz open(2)
. Onları başka bir yöntemle paylaşan işlemlerde kullanılırlar. Bir işlem FIFO'lar açar ve ardından örneğin a'yı gerçekleştirirse, fork(2)
çocuğu dosya tanımlayıcılarını ve bunların arasında boruyu devralır.
UNIX etki alanı soketleri, adsız kanallar ve FIFO, paylaşılan bellek bölümlerini kullanmaları bakımından benzerdir. Uygulamanın ayrıntıları bir sistemden diğerine değişebilir, ancak fikir her zaman aynıdır: aynı bellek bölümünü iki ayrı işlemde bellek eşlemesine veri paylaşmaları için ekleyin
( düzenleme: bunu uygulamanın açık bir yolu olurdu, ancak bu gerçekte belleğe yalnızca çekirdek belleğini kullanan Linux'ta nasıl yapıldığını değil, aşağıdaki cevaplara bakın: @ tjb63.
Daha sonra çekirdek sistem çağrılarını yapar ve mekanizmayı soyutlar.