इसमें आम तौर पर दो स्तर शामिल होते हैं:
- आंतरिक बफ़र्स
- ऑपरेटिंग सिस्टम बफ़र्स
आंतरिक बफ़र्स रनटाइम / लाइब्रेरी / भाषा द्वारा बनाई गई बफ़र्स हैं, जिनके खिलाफ आप प्रोग्रामिंग कर रहे हैं और हर लिखने के लिए सिस्टम कॉल से बचकर चीजों को गति देने के लिए है। इसके बजाय, जब आप किसी फ़ाइल ऑब्जेक्ट पर लिखते हैं, तो आप उसके बफर में लिखते हैं, और जब भी बफर भर जाता है, तो सिस्टम कॉल का उपयोग करके डेटा को वास्तविक फ़ाइल में लिखा जाता है।
हालाँकि, ऑपरेटिंग सिस्टम बफ़र्स के कारण, इसका मतलब यह नहीं हो सकता है कि डेटा डिस्क पर लिखा गया है । इसका अर्थ केवल यह हो सकता है कि डेटा को आपके रनटाइम द्वारा बनाए गए बफ़र्स से कॉपी किया जाता है, ऑपरेटिंग सिस्टम द्वारा बनाए गए बफ़र्स में।
यदि आप कुछ लिखते हैं, और यह बफर (केवल) में समाप्त होता है, और आपकी मशीन में बिजली कट जाती है, तो मशीन बंद होने पर डेटा डिस्क पर नहीं होता है।
तो, आप के साथ मदद करने के लिए उनके पास है flush
और fsync
तरीकों, उनके संबंधित वस्तुओं पर।
पहला, flush
बस किसी भी डेटा को लिख देगा जो कि प्रोग्राम बफर में वास्तविक फाइल में लैंगर करता है। आमतौर पर इसका मतलब है कि डेटा को प्रोग्राम बफर से ऑपरेटिंग सिस्टम बफर में कॉपी किया जाएगा।
विशेष रूप से इसका मतलब यह है कि यदि किसी अन्य प्रक्रिया में वही फ़ाइल पढ़ने के लिए खुली है, तो यह उस डेटा तक पहुंच बना सकेगा जिसे आपने फ़ाइल में फ़्लश किया था। हालांकि, यह जरूरी नहीं है कि यह डिस्क पर "स्थायी रूप से" संग्रहीत किया गया है।
ऐसा करने के लिए, आपको उस os.fsync
विधि को कॉल करने की आवश्यकता है जो यह सुनिश्चित करती है कि सभी ऑपरेटिंग सिस्टम बफ़र भंडारण उपकरणों के साथ सिंक्रनाइज़ हैं, दूसरे शब्दों में, यह विधि ऑपरेटिंग सिस्टम बफ़र्स से डेटा को डिस्क पर कॉपी करेगी।
आमतौर पर आपको किसी भी विधि से परेशान होने की आवश्यकता नहीं है, लेकिन यदि आप ऐसे परिदृश्य में हैं जहां व्यामोह डिस्क के बारे में वास्तव में समाप्त होता है तो यह एक अच्छी बात है, आपको निर्देश के अनुसार दोनों कॉल करना चाहिए।
2018 में परिशिष्ट।
ध्यान दें कि कैश मैकेनिज्म के साथ डिस्क अब 2013 की तुलना में बहुत अधिक सामान्य है, इसलिए अब कैशिंग और बफ़र्स के और भी अधिक स्तर हैं। मुझे लगता है कि इन बफ़र्स को सिंक / फ्लश कॉल द्वारा भी नियंत्रित किया जाएगा, लेकिन मुझे वास्तव में नहीं पता है।
with file('blah') as fd: #dostuff
निर्माण का उपयोग करता हूं, तो मुझे पता है कि यह फ़ाइल विवरणक को बंद करने की गारंटी देता है। क्या यह फ्लश या सिंक भी करता है?