Yanıtlar:
Borular, 0 (stdin) 'den farklı dosya tanımlayıcılarına bağlanır:
$ echo <(true)
/dev/fd/63
$ echo <(true) <(true)
/dev/fd/63 /dev/fd/62
Bir süreç elbette aynı anda birden fazla açık dosya tanımlayıcıya sahip olabilir, bu yüzden sorun yoktur.
pipe()Sistem çağrısı tarafından yaratıldığı gibi sadece borular .
pipe()ve ardından alt işlemleri çatallar. Ana işlem , anonim bir kanal kullanılıyorsa açık olan ek dosya tanımlayıcılarına sahiptir. Bu ek dosya tanımlayıcıları forma geçirilir /dev/fd/...ve işlem genellikle bu dosya adlarını kullanarak bunları açar. Bu, onların dup()daha da açık dosya tanımlayıcıları oluşturmasına neden olur . Süreç ayrıca adlandırılmış dosya tanımlayıcıyı herhangi bir açık çağrı olmadan hemen kullanabilir ...
a, bunu olarak adlandırılan ./a <(ls)ve başarıyla (benim durumumda 63) isimli dosya decriptor kanıtlayan, dosyaların listesini baskılı zaten açıktı. Bash, Linux'tan farklı mimarilerde geçici bir dizinde adlandırılmış yöneltmeler kullanabilir, bu durumda ana işleme girerken ek dosya tanımlayıcıları açılmaz.
bashadam sayfası.