fseek(...)
एक लाइब्रेरी कॉल है, न कि ओएस सिस्टम कॉल। यह रन-टाइम लाइब्रेरी है जो ओएस को सिस्टम कॉल करने में शामिल वास्तविक ओवरहेड का ख्याल रखती है, तकनीकी रूप से बोलते हुए, fseek अप्रत्यक्ष रूप से सिस्टम को कॉल कर रहा है लेकिन वास्तव में यह नहीं है (यह बीच के बीच स्पष्ट अंतर लाता है लाइब्रेरी कॉल और सिस्टम कॉल के बीच अंतर)। fseek(...)
अंतर्निहित प्रणाली का एक मानक इनपुट-आउटपुट समारोह परवाह किए बिना है ... लेकिन ... और यह एक बड़ा तथापि ...
ओएस की तुलना में अधिक होने की संभावना अपने कर्नेल स्मृति में फ़ाइल कैश की गई है करने के लिए नहीं है , यानी, डिस्क पर उस स्थान पर सीधा ऑफसेट जहां 1 और 0 के संग्रहित हैं, यह ओएस की कर्नेल परतों के माध्यम से, संभवतः अधिक है, कर्नेल के भीतर एक शीर्ष-सबसे परत है जिसमें स्नैपशॉट होगा फाइल से बना है, यानी डेटा इसमें अनजाने में डेटा है (यह किसी भी तरह से परवाह नहीं करता है, जब तक डिस्क पर लांचेशन के लिए उस ऑफसेट के लिए डिस्क संरचना के 'पॉइंटर्स' वैध है!) ...
जब fseek(..)
होता है, तो वहां डी बहुत अधिक सिर, अप्रत्यक्ष रूप से, कर्नेल ने डिस्क से पढ़ने का कार्य सौंपा, इस पर निर्भर करता है कि फ़ाइल कितनी खंडित है, यह सैद्धांतिक रूप से, "सभी जगह" हो सकती है, जो एक महत्वपूर्ण ओवर-हेड हो सकती है उपयोगकर्ता-भूमि परिप्रेक्ष्य से, यानी सी कोड fseek(...)
कर रहा है, यह डेटा को "डेटा के एक संगत दृश्य" में एकत्रित करने के लिए स्वयं को जगह पर बिखरा सकता है और अब से, इसमें डालने फ़ाइल के बीच, (इस चरण में याद रखें, कर्नेल को डेटा के लिए वास्तविक डिस्क प्लेटर में स्थान/ऑफसेट को समायोजित करना होगा) फ़ाइल के अंत में जोड़ने से धीमे समझा जाएगा।
कारण काफी सरल है, कर्नेल "जानता है" आखिरी ऑफसेट क्या था, और बस ईओएफ मार्कर को मिटा दें और दृश्यों के पीछे अधिक डेटा डालें, कर्नेल को स्मृति के दूसरे ब्लॉक को आवंटित करना है डेटा संलग्न करने के बाद, एक ईओएफ मार्कर के बाद डिस्क पर स्थान पर समायोजित ऑफ़सेट के साथ डिस्क-बफर।
fseek() et al का उपयोग करके आप बस फ़ाइल के बीच में डेटा सम्मिलित नहीं कर सकते हैं, इसलिए आपका प्रश्न मंथन है। –
आप फ़ाइल के बीच में डेटा सम्मिलित नहीं कर सकते हैं (जितना आप किसी फ़ाइल या शुरुआत के मध्य से कुछ नहीं हटा सकते हैं)। सबसे अच्छा आप फ़ाइल के बीच में डेटा ओवरराइट कर सकते हैं। – dmeister