मैं करना चाहते हैं:संदेश फ़ाइल में स्मृति बफर करने के लिए लिखते हैं (कुछ fopen, लेकिन बफ़र होना लिखते हैं, न डिस्क)
- रीडायरेक्ट stdout/stderr एक में स्मृति बफर करने के लिए
- , बल्कि जबकि छोड़ने डिस्क
- करने से stdout/मुझे पता है कि करने के लिए dup2 और freopen उपयोग करने के लिए के रूप में सामान्य
चल गलती:
- रीडायरेक्ट stdout/अं मेरी
- को चुनने का एक फाइल करने के लिए, जबकि stdout/अं सामान्य
के रूप में चल छोड़ने ... लेकिन मैं आइटम 2 के बारे में यकीन नहीं है?
कारण: मैं डेटा को स्टडआउट/गलती (जो कि तृतीय पक्ष कोड से आ रहा है) पर पोस्ट-प्रोसेस करना चाहता है, और उसके बाद इसे वेबसर्वर को भेजना है - जबकि एप्लिकेशन सामान्य के रूप में चल रहा है।
क्यों? ... क्योंकि अभी जब हमारा ऐप चलता है तो हम महत्वपूर्ण डेटा देख रहे हैं, तीसरे पक्ष कोड से stdout (और err) पर जाएं, और यह एक पिटा है जो स्थानीय लॉगफाइल के साथ उपयोगकर्ताओं को कोशिश करने और गड़बड़ करने के लिए मिलता है। मैं रिंग बफर में "अंतिम एन बाइट्स" को कैप्चर करता हूं, इसके बाद प्रक्रिया करता हूं, और फिर - अगर कोई समस्या है जो उपयोगकर्ता रिपोर्ट करता है - उसे सर्वर पर भेजें।
फाइलों से क्यों बचें? ... क्योंकि यह कोड के लिए है जिसे आईओएस के साथ-साथ डेस्कटॉप पर भी चलाना है, और "लगातार फाइल पर लिखना" कुछ ऐसा है जो मैं टालना चाहता हूं, क्योंकि मैं इसे किसी फ़ाइल के रूप में नहीं चाहता हूं। इसके अलावा ... मुझे उस फ़ाइल को बनाए रखने, इसके आकार को सक्रिय रूप से ट्रिम करने, आदि के बारे में चिंता करने की ज़रूरत होगी।
आप एक पाइप का उपयोग कर सकते हैं। इस समाधान को देखें: http://stackoverflow.com/questions/955962/how-to-buffer-stdout-in-memory-and-write-it-from-a-dedicated-thread – arc
कुछ यूनिक्स या पॉज़िक्स में http है : //pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html फ़ंक्शन (जीएनयू द्वारा प्रेरित)। जीएनयू में http://linux.die.net/man/3/open_memstream भी है, शायद आपके आईओएस में ये हैं। –
ऐसा क्यों लगता है कि लोगों को पता नहीं है कि यूनिक्स सॉकेट क्या है? एक बनाएं, इसे अपने तृतीय-पक्ष stdin/stdout को डुप्लिकेट करें, इसे पोस्ट करने के लिए अपने कोड का उपयोग करें, कोई डिस्क शामिल नहीं है। – tbert