मेरा आवेदन (सी प्रोग्राम) एक ही फ़ाइल में दो फ़ाइल हैंडल खोलता है (एक लिखने में और एक पढ़ने मोड में)। ऐप में दो अलग-अलग धागे फ़ाइल से पढ़ते हैं और लिखते हैं। यह ठीक काम करता है। चूंकि मेरा ऐप सीमित रैम डिस्क आकार के साथ एम्बेडेड डिवाइस पर चलता है, इसलिए मैं अधिकतम आकार तक पहुंचने के लिए फ़ाइल की शुरुआत में लपेटने के लिए FileHandle
लिखना चाहता हूं और सर्कुलर बफर की तरह अनुसरण करने के लिए FileHandle
पढ़ना चाहता हूं। मैं this question के उत्तरों से समझता हूं कि यह काम करना चाहिए। हालांकि जैसे ही मैं फ़ाइल की शुरुआत के लिए FileHandle
लिखने के fseek
लिखता हूं, fread
त्रुटि देता है। EOF
फ़ाइल की शुरुआत के लिए fseek
करने पर रीसेट हो जाएगा? यदि ऐसा है, तो रीसेट करने के लिए EOF
के बिना लिखने के लिए फ़ाइल फ़ाइल स्थिति 0 पर सेट करने के लिए कौन सा फ़ंक्शन उपयोग किया जाना चाहिए।फ़ाइल का उपयोग कर गोलाकार बफर को कैसे कार्यान्वित करें?
संपादित करें/अद्यतन: मैं चीजों की जोड़ी की कोशिश की:
पर @neodelphi मैं पाइप यह काम करता है के लिए इस्तेमाल किया आधार पर। हालांकि मेरे उपयोग के लिए मुझे एक फाइल लिखना आवश्यक है। मुझे लाइव वीडियो निगरानी धारा के कई चैनल प्राप्त होते हैं जिन्हें हार्डडिस्क में संग्रहीत करने की आवश्यकता होती है और डीकोडेड और मॉनीटर पर प्रदर्शित भी पढ़ा जाता है।
ftell करने पर @ क्लेमेंट सुझावों के लिए धन्यवाद मैंने अपने कोड में कुछ कीड़े तय की हैं और पाठक के लिए काम लपेटें हैं, हालांकि, डेटा पढ़ना अभी भी खराब डेटा प्रतीत होता है क्योंकि लेखन अभी भी buffered है लेकिन पाठक कठोर सामग्री को हार्ड से पढ़ता है डिस्क। मैं प्रदर्शन विचारों के कारण बफरिंग से बच नहीं सकता (मुझे 32 एमबीपीएस लाइव डेटा मिलता है जिसे हार्डडिस्क में लिखा जाना चाहिए)। मैंने फ्लशिंग जैसी चीजों को केवल अंतराल में लिखने की कोशिश की है जब लपेटें और लपेटने के बाद फ़ाइल (ftruncate) को छीनने के दौरान लपेटें, लेकिन इससे पुरानी डेटा समस्या हल नहीं होती है।
मैं पिंगपांग फैशन में दो फ़ाइलों का उपयोग करने के लिए यदि इस मुद्दे को हल करती है देखने के लिए कोशिश कर रहा हूँ, लेकिन अगर वहाँ एक बेहतर समाधान
क्या आप फ़ाइल को पढ़ने के दौरान लॉक कर रहे हैं? –
यदि आप लिनक्स जैसी प्रणाली पर विकास कर रहे हैं, तो क्या आपने पाइप फाइलों की कोशिश की? इस तरह की फाइलें केवल लिखी गई हैं जो लिखी गई हैं लेकिन पढ़ी नहीं गई हैं, इसलिए एक गोलाकार बफर को लागू करना आवश्यक नहीं हो सकता है। – neodelphi
@ क्लेमेंट। मेरे पास कोई ताला नहीं है। मैं std c lib fread और fwrite कॉल का उपयोग करता हूं – Badri