विंडोज स्वचालित, अनिवार्य फ़ाइल लॉकिंग के लिए चूक करता है। मैनुअल, सहकारी फ़ाइल लॉक करने के लिए डिफ़ॉल्ट UNIXes। दोनों ही मामलों में, चूक अधिक हो सकती है, लेकिन दोनों ही मामलों में वे आमतौर पर नहीं होती हैं।
बहुत सारे पुराने विंडोज कोड fopen
देशी API (फ़ंक्शन जैसे CreateFile
) के बजाय C / C ++ API (फ़ंक्शन जैसे ) का उपयोग करते हैं । C / C ++ API आपको यह निर्दिष्ट करने का कोई तरीका नहीं देता है कि लॉकिंग कैसे अनिवार्य होगी, इसलिए आपको डिफॉल्ट मिलते हैं। डिफ़ॉल्ट "शेयर मोड" "परस्पर विरोधी" कार्यों को प्रतिबंधित करता है। यदि आप लिखने के लिए एक फ़ाइल खोलते हैं, तो लेखन को संघर्ष मान लिया जाता है, भले ही आप वास्तव में फ़ाइल पर कभी नहीं लिखते हैं। नाम बदलने के लिए डिट्टो।
और, यहां जहां यह खराब हो जाता है। पढ़ने या लिखने के लिए खोलने के अलावा, C / C ++ API यह निर्दिष्ट करने का कोई तरीका नहीं प्रदान करता है कि आप फ़ाइल के साथ क्या करना चाहते हैं। इसलिए एपीआई को यह मान लेना होगा कि आप कोई कानूनी कार्यवाही करने जा रहे हैं। के बाद से ताला अनिवार्य है, एक open
है कि अनुमति देता है एक परस्पर विरोधी आपरेशन से इनकार कर दिया हो जाएगा, भले ही कोड परस्पर विरोधी कार्रवाई करने के लिए इरादा कभी नहीं लेकिन सिर्फ एक और उद्देश्य के लिए फ़ाइल को खोलने गया था।
इसलिए यदि कोड सी / सी ++ एपीआई का उपयोग करता है, या इन मुद्दों के बारे में विशेष रूप से सोचने के बिना मूल एपीआई का उपयोग करता है, तो वे हर फ़ाइल के लिए संभव संचालन के अधिकतम सेट को रोकने के लिए हवा देंगे और एक फ़ाइल को खोलने में असमर्थ हैं जब तक कि हर संभव ऑपरेशन वे नहीं करते। एक बार खुलने के बाद उस पर प्रदर्शन नहीं किया जा सकता है।
मेरी राय में, विंडोज विधि UNIX विधि की तुलना में बहुत बेहतर काम करेगी यदि प्रत्येक कार्यक्रम अपने शेयर मोड और खुले मोड को बुद्धिमानी से और अच्छी तरह से विफलता के मामलों को चुने। यूनिक्स विधि, हालांकि, बेहतर काम करती है अगर कोड इन मुद्दों के बारे में सोचने के लिए परेशान नहीं करता है। दुर्भाग्य से, बेसिक C / C ++ API विंडोज फाइल एपीआई पर अच्छी तरह से मैप नहीं करता है जो शेयर मोड को हैंडल करता है और परस्पर विरोधी अच्छी तरह से खुलता है। तो शुद्ध परिणाम थोड़ा गड़बड़ है।