Sorunuzla ilgili yanlış görünen tek şey ,
A önce koşar, sonra B A'nın stdout'unu alır
Aslında, her iki program da hemen hemen aynı anda başlatılacaktı. Herhangi bir giriş varsa Bokunmaya çalıştığında okumak için giriş kalmayıncaya kadar, bu engeller. Benzer şekilde, çıktıyı okuyan kimse yoksa A, yazıları okunana kadar bloke olur (bazıları boru tarafından arabelleğe alınır).
Bir boru hattında yer alan süreçleri senkronize eden tek şey I / O, yani boru boyunca okuma ve yazmadır. Yazma veya okuma olmazsa, iki süreç birbirinden tamamen bağımsız olarak çalışır. Biri diğerinin okumasını veya yazılmasını yoksayarsa, yoksayılan işlem SIGPIPE, diğer işlem sonlandığında bir sinyalle (yazıyorsa) engellenir ve sonunda bir dosya tarafından sonlanır veya dosya sonu koşulu (okunuyorsa) elde edilir. .
Açıklamak için deyimsel yol, A | Biki program içeren bir boru hattı olmasıdır. Birinci programdan standart çıktıda üretilen çıktı, ikinci girdi tarafından standart girdide okunabilir ("[çıktısı] A[girdi] B'ye bağlanır ). Kabuk bunun olmasını sağlamak için gerekli sıhhi tesisat yapar.
"Tüketici" ve "üretici" kelimelerini kullanmak istiyorsanız, sanırım bu da uygun
Bunların C dilinde yazılmış programlar olması önemli değildir. Bunun Linux, macOS, OpenBSD veya AIX olması önemli değildir.