में अवरुद्ध किए बिना नामित पाइपों से पढ़ने वाली पाइपलाइनों को सेट करना मैं किसी दिए गए पाइप पर खोले गए फ़ाइल डिस्क्रिप्टर के साथ एक उपप्रोसेसर को कॉल करना चाहता हूं जैसे कि खुले() कॉल पाइप के दूसरी तरफ प्रतीक्षा नहीं कर रहा है एक कनेक्शन प्राप्त करें।बैश
प्रदर्शित करने के लिए:
$ mkfifo /tmp/foobar.pipe
$ some_program --command-fd=5 5</tmp/foobar.pipe
इस मामले में, some_program
जब तक कुछ प्रक्रिया /tmp/foobar.pipe
खुला है लिखने के लिए नहीं चला जाता है; हालांकि, some_program
के पास कम प्रभाव प्राप्त होने पर भी उपयोगी प्रभाव पड़ते हैं, इसलिए वांछित व्यवहार some_program
के लिए तत्काल निष्पादित किया जाना है।
O_NONBLOCK
ध्वज के साथ /tmp/foobar.pipe
खोलने वाली एक वैकल्पिक स्क्रिप्टिंग भाषा (पायथन, पर्ल, आदि) या एक सी रैपर के माध्यम से निष्पादित करके ऐसा करने के लिए तंत्र स्पष्ट हैं; मैं एक शुद्ध-बैश समाधान की तलाश में हूं, क्या एक संभव होना चाहिए।
mkfifo /tmp/foobar.in
mkfifo /tmp/foobar.out
(cat </tmp/foobar.in) >/tmp/foobar.out &
some_program --command-fd=5 5</tmp/foobar.out
शायद इस मदद करता है :-)
आप सही हैं यह एक टाइपो था। बस इसे संपादित किया। और हाँ पृष्ठभूमि प्रक्रिया बदसूरत है, यही कारण है कि मैं इसे एक हैक कहा जाता है :) – Sec