क्या बंद करने के लिए कोई तरीका है कि एक पाठक ने नामित पाइप (या बाहर निकला), के के बिना इसे बंद कर दिया है?पता लगाएं कि पाठक नामित पाइप (एफआईएफओ)
मुझे यह जानने की ज़रूरत है क्योंकि पाइप को लिखने वाला प्रारंभिक डेटा अलग है; शेष डेटा आने से पहले पाठक प्रारंभिक शीर्षलेख की अपेक्षा कर रहा है।
वर्तमान में, मुझे यह पता चलता है जब मेरा write()
EPIPE
के साथ विफल रहता है। फिर मैंने एक ध्वज सेट किया जो कहता है "अगली बार, हेडर भेजें"। हालांकि, कुछ भी लिखने से पहले पाठक को बंद करने और पाइप को फिर से खोलना संभव है। इस मामले में, मुझे कभी नहीं पता कि उसने क्या किया है, और वह जिस हेडर की अपेक्षा कर रहा है उसे न भेजें।
क्या एसिंक घटना प्रकार की कोई चीज है जो यहां मदद कर सकती है? मुझे कोई सिग्नल भेजा नहीं जा रहा है।
ध्यान दें कि मैंने कोई भी भाषा टैग शामिल नहीं किया है, क्योंकि इस प्रश्न को भाषा-अज्ञेयवादी माना जाना चाहिए। मेरा कोड पायथन है, लेकिन उत्तर सी, या सिस्टम कॉल-स्तरीय बाइंडिंग के साथ किसी भी अन्य भाषा पर लागू होना चाहिए।
मैन 2 लिखें: 'EPIPE' 'fd एक पाइप या सॉकेट से जुड़ा हुआ है जिसका पढ़ने का अंत बंद है। जब ऐसा होता है तो लेखन प्रक्रिया को एक SIG- पीआईपीई सिग्नल भी प्राप्त होगा।(इस प्रकार, लिखने का वापसी मूल्य केवल तभी देखा जाता है जब प्रोग्राम इस सिग्नल को पकड़ता है, ब्लॉक करता है या अनदेखा करता है।) – wildplasser
कोई कारण नहीं है कि समय-समय पर हेडर डेटा न भेजें? अगर पाठक उनके साथ सौदा कर सकता है, तो शायद यह अनावश्यक हेडर से निपट सकता है? – wallyk
@ विल्डप्लेसर मुझे यकीन नहीं है कि आप अभी क्या बिंदु बना रहे हैं। हां, मुझे पता है कि जब मैं इसे लिखने की कोशिश करता हूं तो पाइप बंद हो जाती है। मेरा सवाल यह पूछ रहा है कि लिखने के बिना अतुल्यकालिक रूप से इसका पता कैसे लगाया जाए। –