C Programlama

C dilinde boru işlevi nasıl kullanılır

C dilinde boru işlevi nasıl kullanılır

Boru, süreçler arasında iletişim için bir ortamdır. Bir işlem boruya veri yazar ve başka bir işlem borudan verileri okur. Bu yazıda, kavramı C dilini kullanarak uygulamak için pipe() işlevinin nasıl kullanıldığını göreceğiz.

Boru Hakkında

Boruda, veriler bir FIFO düzeninde tutulur; bu, borunun bir ucuna sırayla veri yazma ve borunun diğer ucundan verileri aynı sırayla okuma anlamına gelir.

Borudan herhangi bir işlem okursa, ancak kanala henüz başka bir işlem yazmadıysa, read dosyanın sonunu döndürür. Bir proses bir boruya yazmak istiyorsa ancak okuma için boruya eklenmiş başka bir proses yoksa, bu bir hata durumudur ve boru bir SIGPIPE sinyali üretir.

Başlık dosyası

#Dahil etmek

Sözdizimi

int boru (int dosyalar[2])

Argümanlar

Bu işlev tek bir argüman alır, iki tam sayıdan oluşan bir dizi (dosya). dosya[0] borudan okumak için kullanılır ve dosyalar[1] boruya yazmak için kullanılır. Borudan okumak isteyen işlem kapatılmalıdır dosyalar[1], ve boruya yazmak isteyen işlem kapanmalı dosya[0].  Borunun gereksiz uçları açıkça kapatılmazsa, dosya sonu (EOF) asla döndürülmez.

Dönüş değerleri

Başarı üzerine, boru() 0 döndürür, başarısızlık durumunda işlev -1 döndürür.

Resimsel olarak, temsil edebiliriz boru() aşağıdaki gibi işlev:

Aşağıda boru işlevinin C dilinde nasıl kullanılacağını gösteren birkaç örnek verilmiştir.

Örnek 1

Bu örnekte boru fonksiyonunun nasıl çalıştığını göreceğiz. Bir boruyu tek bir işlemde kullanmak pek kullanışlı olmasa da bir fikir edineceğiz.

// Örnek 1.c
#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek
int ana()

int n;
int dosya[2];
karakter arabelleği[1025];
char *mesaj = "Merhaba, Dünya!";
boru(filedes);
write(filedes[1], mesaj, strlen(mesaj));
if ((n = read ( filees[0], buffer, 1024 ) ) >= 0)
arabellek[n] = 0; // dizeyi sonlandır
printf("borudan %d bayt oku: "%s"\n", n, tampon);

Başka
pererror("oku");
çıkış (0);

Burada ilk önce kullanarak bir boru oluşturduk boru() işlev daha sonra kullanılarak boruya yazılır dosyalar[1] son. Daha sonra veriler, borunun diğer ucu kullanılarak okunmuştur dosya[0]. Dosyayı okumak ve yazmak için eskiden oku() ve yazmak() fonksiyonlar.

Örnek2

Bu örnekte, üst ve alt süreçlerin boru kullanarak nasıl iletişim kurduğunu göreceğiz.

// Örnek2.c
#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek
#Dahil etmek
int ana()

int dosya sayısı[2], nbayt;
pid_t çocukpid;
char string[] = "Merhaba dünya!\n";
karakter okuma arabelleği[80];
boru(filedes);
if((childpid = çatal()) == -1)

pererror("çatal");
çıkış(1);

if(childpid == 0)

close(filedes[0]);//Alt süreç borunun bu ucuna ihtiyaç duymaz
/* "string"i borunun çıkış tarafından gönder */
write(filedes[1], string, (strlen(string)+1));
çıkış (0);

Başka

/* Üst süreç borunun çıkış tarafını kapatır */
close(filedes[1]);//Üst işlemin borunun bu ucuna ihtiyacı yok
/* Borudan bir dizi oku */
nbytes = read(filedes[0], readbuffer, sizeof(readbuffer));
printf("Dizeyi oku: %s", readbuffer);

dönüş(0);

İlk olarak, boru işlevi kullanılarak bir boru oluşturuldu, ardından bir alt süreç çatallandı. Ardından, alt süreç okuma ucunu kapatır ve boruya yazar. Ana süreç, yazma ucunu kapatır ve borudan okur ve onu görüntüler. Burada veri akışı, çocuktan ebeveyne giden tek yoldur.

Sonuç:

boru() Linux'ta güçlü bir sistem çağrısıdır. Bu yazıda sadece tek yönlü veri akışını gördük, bir proses yazıyor ve diğer proses okuyor, iki boru oluşturarak çift yönlü veri akışını da elde edebiliyoruz.

El Takibiyle Oynanabilecek En İyi Oyunlar
Oculus Quest kısa süre önce, kontrolörler olmadan elle takip etme harika fikrini tanıttı. Resmi olarak veya SideQuest aracılığıyla destek sağlayan sür...
Tam Ekran Linux Uygulamalarında ve Oyunlarında OSD Yerleşimi Nasıl Gösterilir
Tam ekran oyunlar oynamak veya uygulamaları dikkat dağıtmayan tam ekran modunda kullanmak, bir panelde veya görev çubuğunda görünen ilgili sistem bilg...
En İyi 5 Oyun Yakalama Kartı
YouTube'da oyun akışlarını hepimiz gördük ve sevdik. PewDiePie, Jakesepticye ve Markiplier, oyun deneyimlerini yükleyerek ve izleyicileri en yeni oyun...