के बफरिंग व्यवहार को समझना मैं लिनक्स पर एक पाइप पर डेटा लिखने के लिए फ़ंक्शन कॉल fwrite()
का उपयोग कर रहा हूं।fwrite()
इससे पहले, fwrite()
डेटा के छोटे-छोटे टुकड़ों (औसत 20 बाइट्स) बार-बार और बफरिंग fwrite()
को छोड़ दिया गया था के लिए बुलाया जा रहा है। प्रक्रिया पर स्ट्रेस ने दिखाया कि एक समय में 4096 बाइट डेटा लिखा जा रहा था।
यह पता चला कि यह लेखन प्रक्रिया मेरे कार्यक्रम में बाधा थी। तो मैंने 64 केबी के ब्लॉक में अपने कोड में डेटा बफर करने का निर्णय लिया और फिर fwrite()
का उपयोग करके एक ही समय में संपूर्ण ब्लॉक लिखें। मैंने FILE * सूचक को 'नो बफरिंग' पर सेट करने के लिए setvbuf()
का उपयोग किया।
प्रदर्शन सुधार उतना महत्वपूर्ण नहीं था जितना कि मुझे उम्मीद थी।
अधिक महत्वपूर्ण बात यह है कि strace
आउटपुट से पता चला कि डेटा एक समय में 4096 बाइट्स लिखा जा रहा था। क्या कोई इस व्यवहार को मेरी व्याख्या कर सकता है? यदि मैं 6412 बी डेटा के साथ fwrite()
पर कॉल कर रहा हूं, तो यह एक समय में केवल 4096 बाइट क्यों लिख रहा है?
क्या FILE * सूचक का उपयोग कर पाइप में डेटा लिखने के लिए fwrite()
का कोई विकल्प है?
क्या आप हमें कोड दिखा सकते हैं? – tuxuday
@Shailesh_Tainwala: आप सी ++ में अपना कोड लिख रहे हैं, लेकिन यह सी ++ की बजाय एक सी प्रश्न है। 'fwrite()' एक सी फ़ंक्शन है, सी ++ फ़ंक्शन नहीं। मैंने आपके प्रश्न में एक सी टैग जोड़ा ताकि आप व्यापक दर्शक प्राप्त कर सकें। –