Üye Kayıt Üye Giriş

İsimli pipe Kullanımı


İsimli pipe Kullanımı

 

 

İsimsiz pipe’lar yalnızca üst ve alt process’ler arasındaki haberleşmede kullanılabilirler.
İsimsiz pipe’larda iki process’in aynı pipe’ı görebilmesi fork işlemi ile birlikte dosya
tablosunun kopyalanması işlemi ile sağlanmaktadır. Oysa isimli pipe’larda üst alt ilişkisi
altında bulunmayan herhangi iki process bir isim altında anlaşarak aynı pipe üzerinde
anlaşabilmektedir. İsimli pipe’lara FIFO dosyaları da denilmektedir. İsimli pipe’lar dizin
girişinde bir dosya gibi görüntülenirler. İsimli pipe’lar shell üzerinden mkfifo komutuyla da
bir dosya gibi yaratılabilirler

.
İsimli pipe’lar üzerinde çalışabilmek için önce pipe’ı yaratmak gerekir. Pipe yaratıldıktan
sonra aslında geri kalan işlem tamamen dosya işlemleri gibi yapılır. Yani pipe open
fonksiyonuyla açılır, read ve write fonksiyonlarıyla okuma yazma yapılır ve close
fonksiyonuyla kapatılır. Aslında pipe yaratma işlemi komut satırından da mkfifo shell
komutuyla yapılabilir.


Not: Ctrl+Z tuşuna basıldığında signal o terminaldeki tüm process’lere gider.
mkfifo Fonksiyonu
Bu fonksiyon isimli pipe’ı yaratmak için kullanılır. mkfifo POSIX standartlarında olan bir
fonksiyondur. Aslında sistemlerin çoğunda mknod isimli daha yetenekli bir fonksiyon vardır.
mknod fonksiyonu yalnızca isimli pipe değil, başka özel dosyaları yaratmakta da kullanılır.
mknod bir POSIX fonksiyonu değildir. Sistemlerin çoğunda mkfifo mknod fonksiyonunu
çağıracak biçimde yazılmıştır. Özetle mkfifo fonksiyonu mknod fonksiyonunun özel bir
kullanımıdır.


int mkfifo(const char *path, mode_t mode);

Fonksiyonun birinci parametresi isimli pipe’ın ismi, ikinci parametresi yaratılacak dosyanın
erişim bilgileridir. Fonksiyon başarı durumunda 0 değerine, başarısızlık durumunda –1
değerine döner. Fonksiyonun prototipi <sys/stat.h> dosyası içerisindedir.
Anahtar notlar: printf ile sprintf arasındaki ilişki scanf ile sscanf fonksiyonu arasındaki ilişki
ile benzerdir. sprintf ekran yerine bir diziye bilgileri yazar. sscanf ise klavye yerine bir
diziden bilgileri alır.


/* mymkfifo.c */
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
mode_t mode;
if (argc != 3) {
fprintf(stderr, “Wrong number of arguments !...\n”);
exit(1);
}
sscanf(argv[2], “%o”, &mode);
if (mkfifo(argv[1], mode) == -1) {
perror(“mkfifo”);
exit(1);
}
return 0;
}


Şüphesiz mkfifo fonksiyonu processin umask değeriyle yine işleme girmektedir. mkfifo ile
yalnızca isimli pipe yaratılır. İsimli pipe’larda pipe’ı yaratarak açan bir mekanizma yoktur.
Pipe önce mkfifo ile yaratılır. Sonra open fonksiyonu ile açılır. Pipe close işlemi ile otomatik
olarak silinmez. Silmek için sanki bir dosyaymış gibi unlink fonksiyonunu kullanmak
gerekir. İsimli pipe bir dosya gibi dizin girişinde gözükür. Fakat pipe’a yazma yapıldığında
pipe’ın uzunluğu dizin girişinde değişmez hep 0 olarak gözükür.

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER