का उपयोग करके एक पाइप को फ्लश करने के लिए कैसे करें मेरे पास एक स्क्रिप्ट है जो नामित पाइप को लिखती है और दूसरा जो पाइप से पढ़ता है। कभी-कभी, स्क्रिप्ट शुरू करते समय मैंने देखा है कि पाइप की सामग्री स्क्रिप्ट के पिछले भाग से मौजूद है। क्या स्क्रिप्ट की शुरुआत में पाइप को बाहर निकालने का कोई तरीका है?बैश
Q
बैश
7
A
उत्तर
5
मुझे लगता है कि dd
अपने दोस्त है। "जब पाइप लाइन की स्थापना अवरुद्ध रोकता खुलने एफडी/बल्कि लिखने पढ़ने की तुलना में केवल पढ़ने के लिए।"
:
1
आप पाइप से खाली होने तक पढ़ सकते हैं। यह प्रभावी रूप से इसे फ्लश करेगा।
इससे पहले कि आप इस साहसी कामकाज का प्रयास करें, fcntl(mypipe, F_SETFL, O_NONBLOCK)
पर कॉल करें (मुझे शैल-स्क्रिप्टिंग समतुल्य नहीं पता है) जब पिप खाली है तो आपके प्रोग्राम को लटका नहीं है।
dd if=myfifo iflag=nonblock of=/dev/null
strace
open("myfifo", O_RDONLY|O_NONBLOCK)
से पता चलता है और वास्तव में भी एक खाली फीफो पर ब्लॉक नहीं करता:
1
संबंधित मुद्दे
उलझन में, यह नहीं है बैश यह क्या है? –
बैश-बिल्टिन कमांड/फीचर्स का उपयोग करने के अर्थ में नहीं, लेकिन निश्चित रूप से मानक यूनिक्स टूल का उपयोग करके शेल स्क्रिप्टिंग समाधान के अर्थ में। – mvds