फ़ाइल लॉकिंग
फ़ाइल लॉकिंग ऐसा तंत्र है जो किसी कम्प्यूटर फाइल या फ़ाइल के क्षेत्र तक पहुंच को प्रतिबंधित करता है, केवल उपयोगकर्ता (कंप्यूटिंग) या कंप्यूटर प्रक्रिया को विशिष्ट समय पर इसे संशोधित करने या हटाने की अनुमति देता है और फ़ाइल को पढ़ने से रोकता है। इस प्रकार संशोधित या हटाया जा रहा है.
सिस्टम क्लासिक इंटरसीडिंग अपडेट परिदृश्य को रोकने के लिए लॉकिंग प्रयुक्त करता है, जो किसी भी फ़ाइल में अपडेट प्रक्रियाओं के क्रमांकन को प्रयुक्त करके रेस कंडीशन सॉफ्टवेयर का विशिष्ट उदाहरण है। निम्नलिखित उदाहरण मध्यवर्ती अद्यतन समस्या को दर्शाता है:
- कंप्यूटर प्रोसेस a ग्राहक डेटाबेस अभिलेख को फ़ाइल से पढ़ता है जिसमें ग्राहक के खाते की शेष राशि और फोन नंबर सहित खाता जानकारी होती है।
- प्रोसेस b अब उसी फ़ाइल से उसी अभिलेख को पढ़ता है, इसलिए इसकी अपनी प्रति है।
- प्रक्रिया a ग्राहक अभिलेख की अपनी प्रति में खाते की शेष राशि को परिवर्तित हो जाती है और अभिलेख को फ़ाइल में वापस लिख देती है।
- प्रक्रिया b, जिसमें अभी भी ग्राहक अभिलेख की प्रति में खाते की शेष राशि के लिए मूल बासी मूल्य है, खाता शेष को अद्यतन करता है और ग्राहक अभिलेख को फ़ाइल में वापस लिखता है।
- प्रक्रिया b ने अब फ़ाइल में अपना पुराना खाता-शेष मान लिखा है, जिससे प्रक्रिया a द्वारा किए गए परिवर्तन खो गए हैं।
अधिकांश ऑपरेटिंग सिस्टम अभिलेख लॉकिंग की अवधारणा का समर्थन करते हैं, जिसका अर्थ है कि किसी भी फ़ाइल के अन्दर अलग-अलग अभिलेख लॉक किए जा सकते हैं, जिससे कॉनकरेंसी (कंप्यूटर विज्ञान) अद्यतन प्रक्रियाओं की संख्या बढ़ जाती है। डेटाबेस रखरखाव फ़ाइल लॉकिंग का उपयोग करता है, जिससे यह डेटाबेस में अंतर्निहित संपूर्ण भौतिक फ़ाइल तक पहुंच को क्रमबद्ध कर सकता है। चूँकि यह किसी अन्य प्रक्रिया को फ़ाइल तक पहुँचने से रोकता है, यह प्रत्येक लॉक को प्राप्त करने और जारी करने के ओवरहेड को हटाकर फ़ाइल में अनेक क्षेत्रों को व्यक्तिगत रूप से लॉक करने से अधिक कुशल हो सकता है।
किसी भी कंप्यूटर लॉक (कंप्यूटर विज्ञान) की तरह, फ़ाइल लॉक के व्यर्थ उपयोग के परिणामस्वरूप व्यर्थ प्रदर्शन या गतिरोध हो सकता है। इस प्रकार फ़ाइल लॉकिंग का तात्पर्य कंप्यूटर उपयोगकर्ता द्वारा विंडोज सुरक्षा, एनटीएफएस अनुमतियों का उपयोग करके या तीसरे पक्ष फ़ाइल लॉकिंग सॉफ़्टवेयर स्थापित करके प्रयुक्त की गई अतिरिक्त सुरक्षा से भी हो सकता है।
मेनफ्रेम में
आईबीएम ने 1963 में ओएस/360 का उपयोग करके मेनफ्रेम कंप्यूटरों में उपयोग के लिए फ़ाइल लॉकिंग की प्रारंभ की थी, जहां इसे विशेष नियंत्रण कहा गया था।[1]
माइक्रोसॉफ्ट विंडोज़
माइक्रोसॉफ्ट विंडोज़ शेयर फ़ाइलों तक पहुंच प्रबंधित करने के लिए तीन अलग-अलग तंत्रों का उपयोग करता है:
- शेयर-एक्सेस नियंत्रणों का उपयोग करना जो एप्लिकेशन को पढ़ने, लिखने या हटाने के लिए संपूर्ण-फ़ाइल एक्सेस-शेयरिंग निर्दिष्ट करने की अनुमति देता है [2]
- एक ही फ़ाइल के अन्दर क्षेत्रों तक पढ़ने और लिखने की पहुंच में मध्यस्थता करने के लिए बाइट-रेंज लॉक का उपयोग करता है [3]
- विंडोज़ फ़ाइल सिस्टम द्वारा निष्पादित फ़ाइलों को लिखने या हटाने की पहुंच के लिए खोले जाने की अनुमति नहीं दी जा रही है
विंडोज़ को एमएस-डॉस सिस्टम से शेयर-एक्सेस नियंत्रण के शब्दार्थ विरासत में मिले हैं, जहाँ शेयरकरण एमएस-डॉस 3.3 में प्रस्तुत किया गया था। इस प्रकार, किसी एप्लिकेशन को फ़ाइल खोलते समय स्पष्ट रूप से शेयर करने की अनुमति देनी चाहिए; अन्यथा इसमें विवृत होने तक फ़ाइल को विशेष रूप से पढ़ने, लिखने और हटाने की पहुंच है (अन्य प्रकार की पहुंच, जैसे फ़ाइल की विशेषताओं को पुनः प्राप्त करने की अनुमति है।)
शेयर पहुंच के साथ खोली गई फ़ाइल के लिए, एप्लिकेशन फ़ाइल के विशिष्ट क्षेत्रों तक पहुंच को नियंत्रित करने के लिए बाइट-रेंज लॉकिंग का उपयोग कर सकते हैं। ऐसे बाइट-रेंज लॉक फ़ाइल का क्षेत्र (ऑफ़सेट और लंबाई) और लॉक का प्रकार (शेयर या अनन्य) निर्दिष्ट करते हैं। ध्यान दें कि लॉक की जा रही फ़ाइल के क्षेत्र में फ़ाइल के अन्दर डेटा होना आवश्यक नहीं है, और एप्लिकेशन कभी-कभी अपनी कार्यक्षमता को प्रयुक्त करने के लिए इस क्षमता का लाभ उठाते हैं।
विंडोज़ में फ़ाइल पढ़ने/लिखने वाले एपीआई का उपयोग करने वाले अनुप्रयोगों के लिए, विंडोज़ के अन्दर निष्पादित फ़ाइल सिस्टम द्वारा बाइट-रेंज लॉक प्रयुक्त किए जाते हैं (जिन्हें अनिवार्य लॉक भी कहा जाता है)। विंडोज़ में फ़ाइल मैपिंग एपीआई का उपयोग करने वाले अनुप्रयोगों के लिए, बाइट-रेंज लॉक प्रयुक्त नहीं होते हैं (जिन्हें सलाहकार लॉक भी कहा जाता है।) बाइट-रेंज लॉकिंग के विंडोज़ सिस्टम पर अन्य दुष्प्रभाव भी हो सकते हैं। उदाहरण के लिए, जब किसी क्लाइंट द्वारा बाइट-रेंज लॉक का उपयोग किया जाता है, जिससे विंडोज़ फ़ाइल-शेयरिंग तंत्र सामान्यतः सभी क्लाइंट के लिए फ़ाइल की क्लाइंट साइड कैशिंग को अक्षम कर देता है। क्लाइंट धीमी पहुंच का निरीक्षण करेगा क्योंकि पढ़ने और लिखने का संचालन उस सर्वर पर भेजा जाना चाहिए जहां फ़ाइल संग्रहीत है।
किसी एप्लिकेशन प्रोग्राम में अनुचित त्रुटि-हैंडलिंग ऐसे परिदृश्य को प्राप्त कर सकती है जहां फ़ाइल लॉक हो जाती है (या तो शेयर एक्सेस का उपयोग करके या बाइट-रेंज फ़ाइल लॉकिंग के साथ) और अन्य एप्लिकेशन द्वारा एक्सेस नहीं किया जा सकता है। यदि ऐसा है, तो उपयोगकर्ता व्यर्थ प्रोग्राम को मैन्युअल रूप से समाप्त करके फ़ाइल पहुंच को पुनर्स्थापित करने में सक्षम हो सकता है। यह सामान्यतः विंडोज़ कार्य प्रबंधक उपयोगिता के माध्यम से किया जाता है।
(dwShareMode) का शेयरिंग मोड मापदंड CreateFile
[2] फ़ंक्शन (फ़ाइलें खोलने के लिए प्रयुक्त) फ़ाइल-शेयरकरण निर्धारित करता है। फ़ाइल को पढ़ने, लिखने या हटाने की पहुंच, या इनमें से किसी भी संयोजन के लिए शेयर करने की अनुमति देने के लिए शेयरकरण मोड निर्दिष्ट किया जा सकता है। फ़ाइल को खोलने के पश्चात के प्रयास फ़ाइल को पहले दी गई सभी शेयरकरण-पहुंच के साथ संगत होने चाहिए। जब फ़ाइल विवृत हो जाती है, तो उस विशिष्ट फ़ाइल के खुलने पर लगाए गए प्रतिबंधों को हटाने के लिए शेयरकरण-पहुँच प्रतिबंधों को समायोजित किया जाता है।
बाइट-रेंज लॉकिंग प्रकार द्वारा निर्धारित किया जाता हैdwFlags
में मापदंड LockFileEx
[4] फ़ाइल के किसी क्षेत्र को लॉक करने के लिए फ़ंक्शन का उपयोग किया जाता है। इस प्रकार विंडोज़ एपीआई फ़ंक्शन LockFile
[5] इसका उपयोग भी किया जा सकता है और फ़ाइल के क्षेत्र पर विशेष लॉक प्राप्त किया जा सकता है।
कोई भी फ़ाइल जिसमें निष्पादन योग्य प्रोग्राम फ़ाइल है जो वर्तमान में कंप्यूटर सिस्टम पर प्रोग्राम के रूप में चल रही है (उदाहरण के लिए an EXE
, COM फ़ाइल|COM
, डायनामिक-लिंक लाइब्रेरी DLL
, कंट्रोल पैनल एप्लेट्स की सूची (विंडोज़) CPL
या अन्य बाइनरी प्रोग्राम फ़ाइल स्वरूप) सामान्यतः ऑपरेटिंग सिस्टम द्वारा ही लॉक किया जाता है, जिससे किसी भी एप्लिकेशन को इसे संशोधित करने या हटाने से रोका जा सकता है। ऐसा करने के किसी भी प्रयास को शेयरकरण उल्लंघन त्रुटि के साथ अस्वीकार कर दिया जाएगा, इस तथ्य के अतिरिक्त कि प्रोग्राम फ़ाइल किसी भी एप्लिकेशन द्वारा नहीं खोली गई है। चूँकि, कुछ पहुँच की अभी भी अनुमति है। उदाहरण के लिए, रनिंग एप्लिकेशन फ़ाइल को निष्पादित करते समय भी उसका नाम परिवर्तित या कॉपी किया जा सकता है।
फ़ाइल विवरणक का उपयोग करके विंडोज़ में एप्लिकेशन द्वारा फ़ाइलों तक पहुंच बनाई जाती है। इन फ़ाइल हैंडल को प्रोसेस एक्सप्लोरर उपयोगिता के साथ खोजा जा सकता है। इस उपयोगिता का उपयोग हैंडल को पकड़कर रखे गए एप्लिकेशन को समाप्त किए बिना उसे बलपूर्वक विवृत करने के लिए भी किया जा सकता है। यह अपरिभाषित व्यवहार का कारण बन सकता है, क्योंकि फोर्स-क्लोज्ड हैंडल का उपयोग करते समय प्रोग्राम को अप्रत्याशित त्रुटि प्राप्त होगी और यहां तक कि अप्रत्याशित फ़ाइल पर भी कार्य हो सकता है क्योंकि हैंडल नंबर को पुनर्चक्रित किया जा सकता है।
माइक्रोसॉफ्ट विंडोज एक्सपी और विंडोज़ सर्वर 2003 संस्करणों ने वॉल्यूम शैडो कॉपी सेवा प्रारंभ की है इस प्रकार (VSS
) एनटीएफएस की क्षमता, किसी भी विशेष लॉक के अतिरिक्त संवृत फ़ाइलों को बैकअप सॉफ़्टवेयर द्वारा एक्सेस करने की अनुमति देती है। चूँकि, जब तक सॉफ़्टवेयर को विशेष रूप से इस सुविधा का समर्थन करने के लिए फिर से नहीं लिखा जाता है, तब तक स्नैपशॉट केवल क्रैश सुसंगत होगा, जबकि उचित रूप से समर्थित एप्लिकेशन ऑपरेटिंग सिस्टम को लेन-देन के अनुरूप स्नैपशॉट बनाने में सहायता कर सकते हैं। इस प्रकार विंडोज़ के अंतर्गत लॉक की गई फ़ाइलों तक पहुँचने के लिए अन्य व्यावसायिक सॉफ़्टवेयर में फ़ाइल एक्सेस मैनेजर और फ़ाइल प्रबंधक खोलें सम्मिलित हैं। ये कर्नेल मोड में फ़ाइलों तक पहुँचने के लिए अपने स्वयं के डिवाइस ड्राइवर को स्थापित करके कार्य करते हैं।
यूनिक्स जैसे सिस्टम्स में
यूनिक्स-जैसे ऑपरेटिंग सिस्टम (लिनक्स और ऐप्पल के मैकओएस सहित) सामान्यतः संवृत हुई फ़ाइलों को स्वचालित रूप से लॉक नहीं करते हैं। यूनिक्स के विभिन्न प्रकारों में कई प्रकार की फ़ाइल-लॉकिंग सिस्टम्स उपलब्ध हैं, और कई ऑपरेटिंग सिस्टम अनुकूलता के लिए से अधिक प्रकार का समर्थन करते हैं। अधिक सामान्य तंत्र है . ऐसे दो अन्य तंत्र हैं और
, जिनमें से प्रत्येक को शीर्ष पर प्रयुक्त किया जा सकता है
fcntl
या अलग से प्रयुक्त किया जा सकता है fcntl
. चूँकि कुछ प्रकार के लॉक को अनिवार्य रूप से कॉन्फ़िगर किया जा सकता है, यूनिक्स के अनुसार फ़ाइल लॉक डिफ़ॉल्ट रूप से सलाह है। इसका कारण यह है कि सहयोगी प्रक्रियाएं आपस में किसी फ़ाइल तक पहुंच को समन्वित करने के लिए लॉक का उपयोग कर सकती हैं, किन्तु असहयोगी प्रक्रियाएं भी लॉक को अनदेखा करने और फ़ाइल को किसी भी विधि से एक्सेस करने के लिए स्वतंत्र हैं। दूसरे शब्दों में, फ़ाइल लॉक केवल अन्य फ़ाइल लॉकर I/O को नहीं लॉक करता है, ।
दो प्रकार के लॉक्स प्रस्तुत किए जाते हैं: शेयर लॉक्स और विशेष लॉक्स के स्थिति में fcntl
, विभिन्न प्रकार के लॉक्स किसी फ़ाइल के विभिन्न अनुभागों (बाइट रेंज) पर या फिर पूरी फ़ाइल पर प्रयुक्त किए जा सकते हैं। इस प्रकार शेयर लॉक्स को ही समय में अनेक प्रक्रियाओं द्वारा रखा जा सकता है, किन्तु विशेष लॉक को केवल प्रक्रिया द्वारा रखा जा सकता है, और शेयर लॉक्स के साथ सह-अस्तित्व नहीं रखा जा सकता है। शेयर लॉक प्राप्त करने के लिए, प्रक्रिया को तब तक प्रतीक्षा करना होगा जब तक कि कोई भी प्रक्रिया कोई विशेष लॉक न रखे। विशेष लॉक प्राप्त करने के लिए, प्रक्रिया को तब तक प्रतीक्षा करना होगा जब तक कि किसी भी प्रक्रिया में किसी भी प्रकार का लॉक न हो। द्वारा बनाए गए तालों के विपरीत fcntl
, जिनके द्वारा बनाया गया है flock
भर में संरक्षित हैं fork
एस, उन्हें फोर्किंग सर्वर में उपयोगी बनाता है। इसलिए से अधिक प्रक्रियाओं के लिए ही फ़ाइल पर विशेष लॉक रखना संभव है, परंतु ये प्रक्रियाएँ पारिवारिक संबंध शेयर करती हों और ही प्रक्रिया में अनन्य लॉक प्रारंभ में डुप्लिकेट fork
. होने से पहले बनाया जाता है।
शेयर लॉक्स को कभी-कभी रीड लॉक कहा जाता है और विशिष्ट लॉक को कभी-कभी राइट लॉक कहा जाता है। चूँकि, क्योंकि यूनिक्स पर लॉक्स सलाहकारी हैं, इसलिए इसे प्रयुक्त नहीं किया जाता है। इस प्रकार डेटाबेस के लिए शेयर लेखन बनाम विशिष्ट लेखन की अवधारणा होना संभव है; उदाहरण के लिए, शेयर पहुंच के अनुसार किसी फ़ील्ड को परिवर्तन की अनुमति दी जा सकती है, जबकि कचरा एकत्र करने और डेटाबेस को फिर से लिखने के लिए विशेष पहुंच की आवश्यकता हो सकती है।
फ़ाइल लॉक फ़ाइल नाम के अतिरिक्त वास्तविक फ़ाइल पर प्रयुक्त होते हैं। यह महत्वपूर्ण है क्योंकि यूनिक्स ही फ़ाइल को संदर्भित करने के लिए एकाधिक नामों की अनुमति देता है। इस प्रकार गैर-अनिवार्य लॉकिंग के साथ, यह कई प्रक्रियाओं से फ़ाइलों तक पहुंचने में अधिक लचीलापन प्रदान करता है। दूसरी ओर, सहकारी लॉकिंग दृष्टिकोण तब समस्याएँ उत्पन्न कर सकता है जब कोई प्रक्रिया अन्य प्रक्रियाओं द्वारा निर्धारित फ़ाइल लॉक का पालन किए बिना किसी फ़ाइल को लिखती है।
इस कारण से, कुछ यूनिक्स जैसे ऑपरेटिंग सिस्टम भी अनिवार्य लॉकिंग के लिए सीमित समर्थन प्रदान करते हैं।[6] ऐसे सिस्टम पर, फ़ाइल जिसका setgid
बिट प्रारंभ है किन्तु जिसका समूह निष्पादन बिट उस फ़ाइल को खोलने पर निष्पादन है, यदि अंतर्निहित फ़ाइल सिस्टम इसका समर्थन करता है तो स्वचालित अनिवार्य लॉकिंग के अधीन होता है। चूँकि, गैर-स्थानीय एनएफएस विभाजन इस बिट की उपेक्षा करते हैं।[7] यदि कोई फ़ाइल अनिवार्य लॉकिंग के अधीन है, तो उस क्षेत्र से पढ़ने का प्रयास जो विशेष लॉक के साथ लॉक है, या किसी ऐसे क्षेत्र में लिखने का प्रयास करता है जो शेयर या एक्सक्लूसिव लॉक के साथ लॉक है, लॉक जारी होने तक ब्लॉक रहता है। यह रणनीति सबसे पहले सिस्टम V में उत्पन्न हुई, और आज इसे सोलारिस (ऑपरेटिंग सिस्टम), एचपी-यूएक्स और लिनक्स ऑपरेटिंग सिस्टम में देखा जा सकता है। चूँकि, यह पॉज़िक्स का हिस्सा नहीं है, और बीएसडी-व्युत्पन्न ऑपरेटिंग सिस्टम जैसे फ्रीबीएसडी, ओपनबीएसडी, नेटबीएसडी और एप्पल का मैकओएस इसका समर्थन नहीं करते हैं।[8] लिनक्स विशेष के माध्यम से अनिवार्य लॉकिंग का भी समर्थन करता है-o mand
फ़ाइल सिस्टम माउंटिंग के लिए मापदंड (), किन्तु इसका उपयोग संभवतः ही कभी किया जाता है।
कुछ यूनिक्स जैसे ऑपरेटिंग सिस्टम किसी चल रहे प्रोग्राम की निष्पादन योग्य फ़ाइल को लिखने के लिए खोलने के प्रयासों को रोकते हैं; यह लॉकिंग का तीसरा रूप है, जो इनके द्वारा प्रदान किए गए fcntl
और flock
से अलग है .
समस्याएँ
एक से अधिक प्रक्रियाएँ किसी विशेष flock
को धारण कर सकती हैं किसी दी गई फ़ाइल पर यदि विशेष लॉक बाद में डुप्लिकेट किया गया था fork
. यह नेटवर्क सर्वर के लिए कोडिंग को सरल बनाता है और दौड़ की स्थिति को रोकने में सहायता करता है, किन्तु अनजान लोगों के लिए यह भ्रमित करने वाला हो सकता है।
अनिवार्य लॉक्स का कोई प्रभाव नहीं पड़ता unlink
सिस्टम कॉल. नतीजतन, कुछ प्रोग्राम, प्रभावी विधि से, अनिवार्य लॉकिंग से बच सकते हैं। स्टीवंस और रैगो (2005) ने देखा कि ed
संपादक ने वास्तव में ऐसा किया था।[9] चाहे और कैसे flock
नेटवर्क फ़ाइल सिस्टम (प्रोटोकॉल) जैसे नेटवर्क फाइल सिस्टम पर लॉक का कार्य कार्यान्वयन पर निर्भर है। बीएसडी सिस्टम पर, flock
एनएफएस-माउंटेड विभाजन पर फ़ाइल के लिए ओपन फ़ाइल डिस्क्रिप्टर पर कॉल सफल एनओपी (कोड) या नो-ऑप्स हैं। 2.6.12 से पहले लिनक्स पर, flock
एनएफएस फाइलों पर कॉल केवल स्थानीय रूप से कार्य करती है। कर्नेल 2.6.12 और उससे ऊपर का कार्यान्वयन flock
पॉज़िक्स बाइट-रेंज लॉक का उपयोग करके एनएफएस फ़ाइलों पर कॉल करता है। ये लॉक प्रयुक्त करने वाले अन्य एनएफएस क्लाइंट को दिखाई देंगे fcntl
-स्टाइल पॉज़िक्स लॉक, किन्तु जो नहीं करते उनके लिए अदृश्य [10] लॉक अपग्रेड और डाउनग्रेड नया लॉक लगाने से पहले पुराने लॉक को हटा देते हैं। यदि कोई एप्लिकेशन किसी विशेष लॉक को शेयर लॉक में डाउनग्रेड कर देता है, जबकि कोई अन्य एप्लिकेशन किसी विशेष लॉक के प्रतीक्षा में ब्लॉक हो जाता है, जिसके पश्चात् वाला एप्लिकेशन एक्सक्लूसिव लॉक प्राप्त कर सकता है और पहले एप्लिकेशन को लॉक कर सकता है। इसका कारण है कि लॉक डाउनग्रेड ब्लॉक कर सकता है, जो प्रति-सहज ज्ञान युक्त हो सकता है।
सभी fcntl
किसी दी गई प्रक्रिया के लिए फ़ाइल से जुड़े लॉक तब हटा दिए जाते हैं जब उस फ़ाइल के लिए कोई फ़ाइल डिस्क्रिप्टर उस प्रक्रिया द्वारा विवृत कर दिया जाता है, तथापि उस फ़ाइल डिस्क्रिप्टर के लिए लॉक का अनुरोध कभी नहीं किया गया होता है। इस प्रकार, fcntl
लॉक्स किसी चाइल्ड प्रक्रिया द्वारा विरासत में नहीं मिले हैं। fcntl
ई> विवृत शब्दार्थ विशेष रूप से उन अनुप्रयोगों के लिए परेशानी भरा है जो सबरूटीन लाइब्रेरीज़ को कॉल करते हैं जो फ़ाइलों तक पहुंच सकते हैं। इनमें से कोई भी बग वास्तविक उपयोग से उत्पन्न नहीं होता है
यूनिक्स डोमेन सॉकेट का उपयोग करके किसी अन्य प्रक्रिया में भेजे गए ओपन फ़ाइल डिस्क्रिप्टर पर लॉक स्थिति का संरक्षण कार्यान्वयन पर निर्भर है।
बफर्ड I/O समस्याएँ
लॉक विफलता का स्रोत तब होता है जब बफ़र किए गए I/O में ऑपरेटिंग सिस्टम बफ़र पूल के अतिरिक्त उपयोगकर्ता के स्थानीय कार्यक्षेत्र में बफ़र्स निर्दिष्ट होते हैं। fread
और fwrite
सामान्यतः बफर्ड I/O करने के लिए उपयोग किया जाता है, और बार फ़ाइल का अनुभाग पढ़ने के बाद, उसी अनुभाग को पढ़ने का और प्रयास, सबसे अधिक संभावना है, स्थानीय बफर से डेटा प्राप्त करेगा। समस्या यह है कि उसी फ़ाइल से जुड़े किसी अन्य उपयोगकर्ता के पास अपने स्वयं के स्थानीय बफ़र्स हैं, और उनके लिए भी यही हो रहा है। fwrite
द्वारा बफ़र से प्राप्त डेटा का fread
क्या नहीं फ़ाइल से ही डेटा प्राप्त कर रहा होगा, और कोई अन्य उपयोगकर्ता इसे परिवर्तित हो सकता था। दोनों उपयोग कर सकते थे flock
विशिष्ट पहुंच सुनिश्चित करने के लिए, जो साथ लिखने से रोकता है, किन्तु चूंकि रीड्स बफर से पढ़ रहे हैं, न कि फ़ाइल से, उपयोगकर्ता #1 द्वारा परिवर्तित किया गया कोई भी डेटा उपयोगकर्ता #2 (ओवर-राइट) द्वारा खो सकता है। इस समस्या का सबसे उत्तम समाधान अनबफ़र्ड I/O का उपयोग करना है (read
और write
) साथ flock
, जिसका अर्थ उपयोग करना भी है lseek
के अतिरिक्त fseek
और ftell
. निस्संदेह, आपको फ़ंक्शन मापदंड और लौटाए गए परिणामों के लिए समायोजन करना होता है। सामान्यतया, शेयर फ़ाइलों के साथ उपयोग किए जाने पर बफ़र्ड I/O असुरक्षित होता है।
अमिगाओएस में
अमिगाओएस में, किसी फ़ाइल (या निर्देशिका) पर लॉक का उपयोग करके प्राप्त किया जा सकता है Lock
फ़ंक्शन (में dos.library
). लॉक शेयर किया जा सकता है (अन्य प्रक्रियाएं फ़ाइल/निर्देशिका को पढ़ सकती हैं, किन्तु इसे संशोधित या हटा नहीं सकती हैं), या विशेष जिससे केवल वह प्रक्रिया जो सफलतापूर्वक लॉक प्राप्त कर ले, ऑब्जेक्ट तक पहुंच या संशोधित कर सकते है। लॉक पूरी वस्तु पर है, उसके किसी भाग पर नहीं है। लॉक को इसके साथ जारी किया जाना चाहिए UnLock
फ़ंक्शन: यूनिक्स के विपरीत, प्रक्रिया समाप्त होने पर ऑपरेटिंग सिस्टम ऑब्जेक्ट को अंतर्निहित रूप से अनलॉक नहीं करता है।
फ़ाइलें लॉक करें
शैल स्क्रिप्ट और अन्य प्रोग्राम अधिकांशतः फ़ाइल लॉकिंग के उपयोग के समान रणनीति का उपयोग करते हैं: इस प्रकार लॉक फ़ाइलों का निर्माण, जो ऐसी फ़ाइलें हैं जिनकी कंटेंट अप्रासंगिक है (चूँकि अधिकांशतः फ़ाइल में लॉक के धारक की प्रक्रिया पहचानकर्ता मिल जाएगी) और जिनकी एकमात्र उद्देश्य उनकी उपस्थिति से संकेत देना है कि कुछ संसाधन विवृत हैं। यदि नियंत्रित किया जाने वाला संसाधन बिल्कुल भी नियमित फ़ाइल नहीं है, तो लॉक फ़ाइल अधिकांशतः सबसे उत्तम विधि होता है, इसलिए फ़ाइलों को लॉक करने के विधियों का उपयोग प्रयुक्त नहीं होता है। उदाहरण के लिए, लॉक फ़ाइल संबंधित संसाधनों के सेट तक पहुंच को नियंत्रित कर सकती है, जैसे कि कई अलग-अलग फाइलें, निर्देशिकाएं, डिस्क विभाजन का समूह, या सर्वर या डेटाबेस कनेक्शन जैसे उच्च स्तरीय प्रोटोकॉल तक चयनित किया जा सकता है ।
लॉक फ़ाइलों का उपयोग करते समय, यह सुनिश्चित करने के लिए ध्यान रखा जाना चाहिए कि संचालन परमाणु (कंप्यूटर विज्ञान) है। लॉक प्राप्त करने के लिए, प्रक्रिया को यह सत्यापित करना होगा कि लॉक फ़ाइल उपस्थित नहीं है और फिर इसे बनाएं, जबकि इस बीच किसी अन्य प्रक्रिया को इसे बनाने से रोकते है। ऐसा करने के विभिन्न विधियों में सम्मिलित हैं:
lockfile
का उपयोग कमांड (एक नियमबद्ध सेमाफोर-फ़ाइल निर्माता में वितरित किया गयाprocmail
पैकेट)।- सिस्टम कॉल जो फ़ाइल बनाती है, किन्तु यदि फ़ाइल पहले से उपस्थित है तो विफल हो जाती है। (सिस्टम कॉल C या C++ जैसी भाषाओं से उपलब्ध हैं, और शेल स्क्रिप्ट नोक्लोबर का उपयोग कर सकती हैं)
mkdir
का उपयोग आदेश दें और विफलता के लिए निकास कोड की जाँच करें [11]
लॉक फ़ाइलों को अधिकांशतः टिल्ड नाम दिया जाता है (~
) जिस फ़ाइल को वे लॉक कर रहे हैं उसके नाम के पहले लगा दिया गया है, या पूरे फ़ाइल नाम का डुप्लिकेट लगा दिया गया है .LCK
. यदि वे फ़ाइल के अतिरिक्त किसी अन्य संसाधन को लॉक कर रहे हैं, तो उन्हें अधिक सही विधि से नाम दिया जा सकता है।
कुछ मोज़िला उत्पाद (जैसे फ़ायरफ़ॉक्स, थंडरबर्ड, सनबर्ड) इस प्रकार के फ़ाइल संसाधन लॉक तंत्र का उपयोग करते हैं (पैरेंट.लॉक नामक अस्थायी फ़ाइल का उपयोग करके)।
अनलॉकर सॉफ्टवेयर
अनलॉकर उपयोगिता है जिसका उपयोग यह निर्धारित करने के लिए किया जाता है कि कौन सी प्रक्रिया किसी फ़ाइल को लॉक कर रही है, और प्रक्रियाओं की सूची के साथ-साथ प्रक्रिया के साथ क्या करना है (किल टास्क, अनलॉक इत्यादि) के साथ-साथ फ़ाइल विकल्पों की सूची भी प्रदर्शित करती है। इस प्रकार हटाएं या नाम परिवर्तित करेें. कुछ यूनिक्स-जैसी सिस्टम्स पर, उपयोगिताएँ जैसे fstat
और lockf
प्रक्रिया, फ़ाइल नाम या दोनों द्वारा फ़ाइल लॉक की स्थिति का निरीक्षण करने के लिए उपयोग किया जा सकता है।
विंडोज़ सिस्टम पर, यदि कोई फ़ाइल लॉक है, जिससे अगले रीबूट पर उसके स्थानांतरण या विलोपन को शेड्यूल करना संभव है। इस दृष्टिकोण का उपयोग सामान्यतः इंस्टॉलरों द्वारा लॉक की गई सिस्टम फ़ाइलों को परिवर्तन करने के लिए किया जाता है।
संस्करण नियंत्रण सिस्टम
संशोधन नियंत्रण में फ़ाइल लॉकिंग का उपयोग दो उपयोगकर्ताओं को समानांतर में ही फ़ाइल संस्करण को परिवर्तन से रोकने के लिए किया जाता है और फिर सही समय, दूसरा उपयोगकर्ता पहले उपयोगकर्ता द्वारा परिवर्तित कियेे गए को अधिलेखित कर देता है। इसे फ़ाइल सिस्टम में लॉक की गई फ़ाइलों को केवल-पढ़ने के लिए चिह्नित करके कार्यान्वित किया जाता है। इस प्रकार फ़ाइल को परिवर्तन की इच्छा रखने वाला उपयोगकर्ता अनलॉक (जिसे चेकआउट भी कहा जाता है) ऑपरेशन करता है, और जब तक चेक-इन (स्टोर) ऑपरेशन नहीं किया जाता है, या लॉक वापस नहीं किया जाता है, तब तक किसी और को फ़ाइल को अनलॉक करने की अनुमति नहीं है।
यह भी देखें
- पाठक-लेखक लॉक
संदर्भ
- ↑ IBM System/360 Operating System: Job Control Language Reference (PDF). IBM. June 1971. pp. 162–164. GC28-6704-1.
- ↑ 2.0 2.1 "
CreateFileW
function". Windows Software Development Toolkit. Microsoft Docs. windows-sdk-content. Microsoft Corporation. Retrieved 2018-11-07. - ↑ "
LockFileEx
function". Windows Software Development Toolkit. Microsoft Docs. windows-sdk-content. Microsoft Corporation. Retrieved 2018-11-07. - ↑ "
LockFileEx
function". Windows Software Development Toolkit. Microsoft Docs. windows-sdk-content. Microsoft Corporation. Retrieved 2020-07-05. - ↑ "
LockFile
function". Windows Software Development Toolkit. Microsoft Docs. windows-sdk-content. Microsoft Corporation. Retrieved 2020-07-05. - ↑ "Mandatory File Locking for the Linux Operating System". kernel.org. Documentation / File Systems. Retrieved 2011-10-08.
- ↑ "Use
Setuid
,Setgid
, and Sticky Bits with Server for NFS". cc731734(WS.10). Retrieved 2011-10-08. - ↑ Viega, John; Messier, Matt (2003). "2.8 Locking Files". C और C++ के लिए सुरक्षित प्रोग्रामिंग कुकबुक (1st ed.). Sabastopol, CA: O'Reilly Media. p. 792. ISBN 978-0-596-00394-4.
Support for mandatory locks varies greatly from one Unix variant to another. Both Linux and Solaris support mandatory locks, but Darwin, FreeBSD, NetBSD, and OpenBSD do not, even though they export the interface used by Linux and Solaris to support them. On such systems, this interface creates advisory locks. Support for mandatory locking does not extend to NFS.
- ↑ Stevens, W. Richard; Rago, Stephen A. (27 June 2005). UNIX पर्यावरण में उन्नत प्रोग्रामिंग (Second ed.). Addison-Wesley Professional. p. 456. ISBN 978-0201433074.
- ↑ "सामान्यतः उत्पन्न होने वाले त्रुटि संदेश". nfs.sourceforge.net. Linux NFS FAQ: D. Source Forge.
- ↑ "Lock your script (against parallel run)".
बाहरी संबंध
- Everything you never wanted to know about file locking, a review of the Unix file locking options and their problems (dated December 13, 2010)
- File-private पॉज़िक्स locks, a LWN.net article on file locks supported on लिनक्स that behave differently from पॉज़िक्स locks regarding inheritance and behavior on close