Boru Hatları
Üst-alt süreç iletişimi
Boru Hatları, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.
Pipe Nedir
Pipe, birbiriyle ilişkili süreçler arasındaki tek yönlü iletişim kanalıdır. Bir süreç içine baytlar yazar, diğeri bunları dışarı okur; bu, veri taşıyan bir konveyör bandına benzer.
İki Dosya Tanımlayıcısı
pipe() çağrısı iki elemanlı bir diziyi doldurur: fd[0] okuma ucudur, fd[1] ise yazma ucudur. fd[1]'e yazılan veriler fd[0]'dan okunabilir.
#include <unistd.h>
#include <stdio.h>
int make_pipe(int fd[2]) {
if (pipe(fd) < 0) { perror("pipe"); return -1; }
/* fd[0] read end, fd[1] write end */
return 0;
}fork ile Birleştirme
fork() sonrasında hem üst hem de alt süreç pipe'ın tanımlayıcılarını paylaşır. Üst ve alt süreçler bu şekilde iletişim kurar: biri yazar, diğeri okur.
Kullanılmayan Uçları Kapatma
Her süreç kullanmadığı ucu kapatmalıdır. Okuyucu yazma ucunu, yazıcı ise okuma ucunu kapatır. Aksi takdirde okuyucu dosya sonunu asla göremez.
#include <unistd.h>
void parent_as_writer(int fd[2]) {
close(fd[0]); /* parent will not read */
write(fd[1], "hello", 5); /* parent writes */
close(fd[1]); /* signal EOF to reader */
}Üst ve Alt Süreç Örneği
Üst süreç bir ileti yazar, alt süreç ise bu iletiyi okur. Her biri ihtiyaç duymadığı ucu kapatır.
#include <unistd.h>
#include <stdio.h>
void demo(int fd[2]) {
if (fork() == 0) { /* child: reader */
close(fd[1]);
char buf[64];
ssize_t n = read(fd[0], buf, sizeof buf - 1);
buf[n] = 0;
printf("child got: %s\n", buf);
close(fd[0]);
} else { /* parent: writer */
close(fd[0]);
write(fd[1], "hi child", 8);
close(fd[1]);
}
}Okuma EOF Döndürür
Tüm yazma uçları kapatıldığında read, dosya sonunu bildirmek için 0 döndürür. Bir yazma ucu açık kalırsa okuyucu daha fazla veri beklerken sonsuza dek engellenir; bu yaygın bir hatadır.
Pipe Kapasitesi ve Engelleme
Bir pipe'ın sınırlı bir arabelleği vardır (çoğunlukla 64 KB). Arabellek dolarsa write, okuyucu verileri boşaltana kadar engellenir. Arabellek boşsa read, veri gelene kadar engellenir. Bu akış denetimi iki süreci eşzamanlar.
dup2 ile Yönlendirme
dup2, bir sürecin standart girdisini veya standart çıktısını bir pipe ucuyla değiştirebilir. Kabuklar cmd1 | cmd2 yapısını bu şekilde uygular; bir komutun çıktısını sonraki komutun girdisine bağlar.
#include <unistd.h>
void stdout_to_pipe(int fd[2]) {
close(fd[0]);
dup2(fd[1], STDOUT_FILENO); /* writes to stdout go into pipe */
close(fd[1]);
}Adlandırılmış Pipe'lar (FIFOs)
Normal bir pipe yalnızca ilişkili süreçleri bağlar. mkfifo ile oluşturulan adlandırılmış pipe (FIFO), dosya sisteminde görünür; böylece ilişkisiz süreçler bunu yoluyla açıp iletişim kurabilir.
#include <sys/stat.h>
int make_fifo(const char *path) {
return mkfifo(path, 0666); /* creates a FIFO file */
}SIGPIPE Tehlikesi
Okuma ucu kapatılmış bir pipe'a yazmak SIGPIPE sinyalini üretir; bu sinyal varsayılan olarak süreci sonlandırır. Sinyali yok sayın veya write çağrısından dönen EPIPE hatasını kontrol edin.
Pipe'lar Ne Zaman Kullanılır
Pipe'lar, üst ve alt süreç arasında basit, tek yönlü akış sağlamak veya programları birbirine bağlamak için idealdir. İki yönlü iletişim ya da ilişkisiz süreçler arası iletişim için FIFO'ları, soketleri veya paylaşılan belleği değerlendirin.
Kısa Kontrol
Pipe'lar hakkındaki anlayışınızı sınayın.
Özet
Üst ve alt süreçler arası iletişim için pipe kullanmayı öğrendiniz.
pipe(), fd[0] (okuma) ve fd[1] (yazma) değerlerini sağlarforkile birleştirin; kullanılmayan uçları kapatın- Tüm yazma uçları kapandığında read, EOF durumunda 0 döndürür
- FIFO'lar ilişkisiz süreçleri bağlar; SIGPIPE'a dikkat edin
Sıkça Sorulan Sorular
“Boru Hatları” dersi ücretsiz mi?
Evet — “Boru Hatları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.
“Boru Hatları” dersinde ne öğreneceğim?
Üst-alt süreç iletişimi C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Boru Hatları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Boru Hatları
- Paylaşılan Bellek
- İleti Kuyrukları
- Sinyaller