2010-07-27 6 views
7

का उपयोग करके एक पाइप को फ्लश करने के लिए कैसे करें मेरे पास एक स्क्रिप्ट है जो नामित पाइप को लिखती है और दूसरा जो पाइप से पढ़ता है। कभी-कभी, स्क्रिप्ट शुरू करते समय मैंने देखा है कि पाइप की सामग्री स्क्रिप्ट के पिछले भाग से मौजूद है। क्या स्क्रिप्ट की शुरुआत में पाइप को बाहर निकालने का कोई तरीका है?बैश

उत्तर

5

मुझे लगता है कि dd अपने दोस्त है। "जब पाइप लाइन की स्थापना अवरुद्ध रोकता खुलने एफडी/बल्कि लिखने पढ़ने की तुलना में केवल पढ़ने के लिए।"

:

+0

उलझन में, यह नहीं है बैश यह क्या है? –

+0

बैश-बिल्टिन कमांड/फीचर्स का उपयोग करने के अर्थ में नहीं, लेकिन निश्चित रूप से मानक यूनिक्स टूल का उपयोग करके शेल स्क्रिप्टिंग समाधान के अर्थ में। – mvds

1

आप पाइप से खाली होने तक पढ़ सकते हैं। यह प्रभावी रूप से इसे फ्लश करेगा।

इससे पहले कि आप इस साहसी कामकाज का प्रयास करें, fcntl(mypipe, F_SETFL, O_NONBLOCK) पर कॉल करें (मुझे शैल-स्क्रिप्टिंग समतुल्य नहीं पता है) जब पिप खाली है तो आपके प्रोग्राम को लटका नहीं है।

dd if=myfifo iflag=nonblock of=/dev/null 

strace

open("myfifo", O_RDONLY|O_NONBLOCK) 

से पता चलता है और वास्तव में भी एक खाली फीफो पर ब्लॉक नहीं करता: