मुखपृष्ठ » कैसे » मैं लिनक्स और ओएस एक्स की तरह विंडोज पर फ़ाइलों का उपयोग क्यों नहीं बदल सकता?

    मैं लिनक्स और ओएस एक्स की तरह विंडोज पर फ़ाइलों का उपयोग क्यों नहीं बदल सकता?


    जब आप लिनक्स और ओएस एक्स का उपयोग कर रहे हैं, तो ऑपरेटिंग सिस्टम आपको उस फ़ाइल को हटाने से रोक नहीं पाएगा जिसका उपयोग अभी तक विंडोज पर किया जा रहा है, आपको ऐसा करने से स्पष्ट रूप से रोक दिया जाएगा। क्या देता है? आप यूनिक्स-व्युत्पन्न सिस्टम पर विंडोज़ में नहीं बल्कि इन-यूज़ फाइल्स को एडिट और डिलीट कर सकते हैं?

    आज का प्रश्न और उत्तर सत्र सुपरयूज़र के सौजन्य से आता है-स्टैक एक्सचेंज का एक उपखंड, क्यू एंड ए वेब साइटों का एक समुदाय-संचालित समूह है।.

    प्रश्न

    सुपरयूजर रीडर the.midget जानना चाहता है कि लिनक्स और विंडोज अलग-अलग फ़ाइलों का उपयोग क्यों करते हैं:

    जब से मैंने लिनक्स का उपयोग करना शुरू किया है, उनमें से एक चीज ने मुझे इस तथ्य से रूबरू कराया है कि यह आपको किसी फ़ाइल का नाम बदलने या यहां तक ​​कि इसे पढ़ने के दौरान हटाने की अनुमति देता है। एक उदाहरण है कि कैसे मैंने गलती से एक वीडियो को हटाने की कोशिश की जब वह खेल रहा था। मैं सफल रहा, और मुझे आश्चर्य हुआ कि जब मैंने सीखा कि आप बिना किसी फ़ाइल के किसी भी चीज़ के बारे में कुछ भी बदल सकते हैं, अगर उसका उपयोग फिलहाल किया जा रहा है या नहीं.

    तो पर्दे के पीछे क्या हो रहा है और उसे विंडोज में चीजों को हटाने से रोक रहा है जैसे कि वह लिनक्स में कर सकता है?

    उत्तर

    सुपरयूजर योगदानकर्ताओं ने सुबह के लिए स्थिति पर कुछ प्रकाश डाला। अम्माज़ लिखते हैं:

    जब भी आप विंडोज में किसी फाइल को खोलते या निष्पादित करते हैं, तो विंडोज फाइल को जगह में लॉक कर देती है (यह एक सरलीकरण है, लेकिन आमतौर पर सच है।) एक फाइल जो एक प्रक्रिया द्वारा लॉक की जाती है, जब तक कि प्रक्रिया इसे जारी नहीं करती है तब तक इसे हटाया नहीं जा सकता है। यही कारण है कि जब भी विंडोज को खुद को अपडेट करना होता है तो आपको प्रभावी होने के लिए रिबूट की आवश्यकता होती है.

    दूसरी ओर, लिनक्स और मैक ओएस एक्स जैसे यूनिक्स-जैसे ऑपरेटिंग सिस्टम फ़ाइल को लॉक नहीं करते हैं, बल्कि अंतर्निहित डिस्क सेक्टरों को। यह एक तुच्छ भेदभाव लग सकता है, लेकिन इसका मतलब है कि किसी भी प्रोग्राम को परेशान किए बिना सामग्री के फाइल सिस्टम तालिका में फ़ाइल का रिकॉर्ड पहले ही हटाया जा सकता है। इसलिए आप किसी फ़ाइल को हटा सकते हैं जबकि यह अभी भी चल रही है या अन्यथा उपयोग में है और यह डिस्क पर मौजूद रहेगी जब तक कि कुछ प्रक्रिया के लिए एक खुला हैंडल होता है भले ही फ़ाइल टेबल में इसका प्रवेश हो गया हो.

    डेविड श्वार्ट्ज इस विचार पर विस्तार करते हैं और इस बात पर प्रकाश डालते हैं कि चीजें आदर्श रूप से कैसे होनी चाहिए और वे कैसे व्यवहार में हैं:

    विंडोज स्वचालित, अनिवार्य फ़ाइल लॉकिंग के लिए चूक करता है। मैनुअल, सहकारी फ़ाइल लॉक करने के लिए डिफ़ॉल्ट UNIXes। दोनों ही मामलों में, चूक अधिक हो सकती है, लेकिन दोनों ही मामलों में वे आमतौर पर नहीं होते हैं.

    बहुत सारे पुराने विंडोज कोड देशी एपीआई (CreateFile जैसे फ़ंक्शन) के बजाय C / C ++ API (फोपेन जैसे फ़ंक्शन) का उपयोग करते हैं। C / C ++ API आपको यह निर्दिष्ट करने का कोई तरीका नहीं देता है कि लॉकिंग कैसे अनिवार्य होगी, इसलिए आपको डिफॉल्ट मिलते हैं। डिफ़ॉल्ट "शेयर मोड" "परस्पर विरोधी" कार्यों को प्रतिबंधित करता है। यदि आप लिखने के लिए एक फ़ाइल खोलते हैं, तो लेखन को संघर्ष माना जाता है, भले ही आप वास्तव में कभी भी फाइल पर न लिखें। नाम बदलने के लिए डिट्टो.

    और, यहाँ है जहाँ यह बदतर हो जाता है। पढ़ने या लिखने के लिए खोलने के अलावा, C / C ++ API यह निर्दिष्ट करने का कोई तरीका नहीं प्रदान करता है कि आप फ़ाइल के साथ क्या करना चाहते हैं। इसलिए एपीआई को यह मान लेना होगा कि आप कोई कानूनी कार्यवाही करने जा रहे हैं। चूँकि लॉकिंग अनिवार्य है, एक ऐसा खुला जो विरोधाभासी कार्रवाई की अनुमति देता है, भले ही कोड कभी भी परस्पर विरोधी कार्रवाई करने का इरादा न करे, लेकिन फ़ाइल को किसी अन्य उद्देश्य के लिए खोल रहा था.

    इसलिए यदि कोड सी / सी ++ एपीआई का उपयोग करता है, या इन मुद्दों के बारे में विशेष रूप से सोचने के बिना मूल एपीआई का उपयोग करता है, तो वे हर फ़ाइल के लिए संभव संचालन के अधिकतम सेट को रोकने के लिए बंद कर देंगे और जब तक कि हर संभव ऑपरेशन वे एक फ़ाइल को खोलने में असमर्थ हों। एक बार खोलने पर उस पर प्रदर्शन नहीं किया जा सकता है.

    मेरी राय में, विंडोज विधि UNIX विधि की तुलना में बहुत बेहतर काम करेगी अगर हर कार्यक्रम अपने शेयर मोड और खुले मोड को बुद्धिमानी से और अच्छी तरह से विफलता के मामलों को चुने। यूनिक्स विधि, हालांकि, बेहतर काम करती है अगर कोड इन मुद्दों के बारे में सोचने के लिए परेशान नहीं करता है। दुर्भाग्यवश, मूल C / C ++ API विंडोज फ़ाइल API पर इस तरह से मैप नहीं करता है कि शेयर मोड को हैंडल करता है और परस्पर विरोधी अच्छी तरह से खुलता है। तो शुद्ध परिणाम थोड़ा गड़बड़ है.

    आपके पास यह है: दो अलग-अलग दृष्टिकोणों को संभालने के लिए दो अलग-अलग परिणाम प्राप्त करना.


    स्पष्टीकरण में कुछ जोड़ना है? टिप्पणियों में ध्वनि बंद। अन्य टेक-सेवी स्टैक एक्सचेंज उपयोगकर्ताओं से अधिक उत्तर पढ़ना चाहते हैं? पूरी चर्चा धागा यहाँ देखें.