मेरे पास कई कार्यकर्ता धागे के साथ एक सी अनुप्रयोग है। यह आवश्यक है कि ये ब्लॉक न करें, जहां कार्यकर्ता धागे को डिस्क पर फ़ाइल में लिखने की आवश्यकता है, मैंने उन्हें स्मृति में एक गोलाकार बफर में लिखा है, और उसके बाद डिस्क पर बफर लिखने के लिए एक समर्पित धागा है।स्मृति में stdout कैसे बफर करें और इसे समर्पित थ्रेड से लिखें
कार्यकर्ता धागे अब और अवरुद्ध नहीं होते हैं। समर्पित धागा कार्यकर्ता धागे को प्रभावित किए बिना डिस्क पर लिखते समय सुरक्षित रूप से ब्लॉक कर सकता है (डिस्क पर लिखते समय यह लॉक नहीं रखता है)। मेरा मेमोरी बफर पर्याप्त रूप से बड़ा होने के लिए ट्यून किया गया है कि लेखक धागा जारी रख सकता है।
यह सब बढ़िया काम करता है। मेरा सवाल है, मैं stdout के लिए कुछ समान कैसे लागू करूं?
मै मैक्रो प्रिंटफ() को मेमोरी बफर में लिखने के लिए मैक कर सकता था, लेकिन मेरे पास सभी कोड पर नियंत्रण नहीं है जो stdout को लिख सकते हैं (इनमें से कुछ तीसरे पक्ष के पुस्तकालयों में हैं)।
विचार? निकबी
यहां सभी समाधान गलत हैं, क्योंकि पाइप को लिखना ब्लॉक कर सकता है। (और यदि आप उन्हें अनब्लॉकिंग सेट करते हैं, तो 'FILE' केवल एक अप्राप्य त्रुटि स्थिति में आ जाएगा यदि इसे फ़्लश करने की आवश्यकता होने पर अवरुद्ध हो जाए।) –