फ़ाइल लॉकिंग
फ़ाइल लॉकिंग ऐसा तंत्र है जो किसी कम्प्यूटर फाइल या फ़ाइल के क्षेत्र तक पहुंच को प्रतिबंधित करता है, केवल उपयोगकर्ता (कंप्यूटिंग) या कंप्यूटर प्रक्रिया को विशिष्ट समय पर इसे संशोधित करने या हटाने की अनुमति देता है और फ़ाइल को पढ़ने से रोकता है। संशोधित या हटाया जा रहा है.
सिस्टम क्लासिक इंटरसीडिंग अपडेट परिदृश्य को रोकने के लिए लॉकिंग लागू करता है, जो किसी भी फ़ाइल में अपडेट प्रक्रियाओं के क्रमांकन को लागू करके रेस कंडीशन#सॉफ्टवेयर का विशिष्ट उदाहरण है। निम्नलिखित उदाहरण मध्यवर्ती अद्यतन समस्या को दर्शाता है:
- कंप्यूटर प्रोसेस ए ग्राहक डेटाबेस रिकॉर्ड को फ़ाइल से पढ़ता है जिसमें ग्राहक के खाते की शेष राशि और फोन नंबर सहित खाता जानकारी होती है।
- प्रोसेस बी अब उसी फ़ाइल से उसी रिकॉर्ड को पढ़ता है, इसलिए इसकी अपनी प्रति है।
- प्रक्रिया ए ग्राहक रिकॉर्ड की अपनी प्रति में खाते की शेष राशि को बदल देती है और रिकॉर्ड को फ़ाइल में वापस लिख देती है।
- प्रक्रिया बी, जिसमें अभी भी ग्राहक रिकॉर्ड की प्रति में खाते की शेष राशि के लिए मूल बासी मूल्य है, खाता शेष को अद्यतन करता है और ग्राहक रिकॉर्ड को फ़ाइल में वापस लिखता है।
- प्रक्रिया बी ने अब फ़ाइल में अपना पुराना खाता-शेष मान लिखा है, जिससे प्रक्रिया ए द्वारा किए गए परिवर्तन खो गए हैं।
अधिकांश ऑपरेटिंग सिस्टम रिकॉर्ड लॉकिंग की अवधारणा का समर्थन करते हैं, जिसका अर्थ है कि किसी भी फ़ाइल के भीतर अलग-अलग रिकॉर्ड लॉक किए जा सकते हैं, जिससे कॉनकरेंसी (कंप्यूटर विज्ञान) अद्यतन प्रक्रियाओं की संख्या बढ़ जाती है। डेटाबेस रखरखाव फ़ाइल लॉकिंग का उपयोग करता है, जिससे यह डेटाबेस में अंतर्निहित संपूर्ण भौतिक फ़ाइल तक पहुंच को क्रमबद्ध कर सकता है। हालाँकि यह किसी अन्य प्रक्रिया को फ़ाइल तक पहुँचने से रोकता है, यह प्रत्येक लॉक को प्राप्त करने और जारी करने के ओवरहेड को हटाकर फ़ाइल में कई क्षेत्रों को व्यक्तिगत रूप से लॉक करने से अधिक कुशल हो सकता है।
किसी भी कंप्यूटर लॉक (कंप्यूटर विज्ञान) की तरह, फ़ाइल लॉक के खराब उपयोग के परिणामस्वरूप खराब प्रदर्शन या गतिरोध हो सकता है। फ़ाइल लॉकिंग का तात्पर्य कंप्यूटर उपयोगकर्ता द्वारा विंडोज सुरक्षा, एनटीएफएस अनुमतियों का उपयोग करके या तीसरे पक्ष फ़ाइल लॉकिंग सॉफ़्टवेयर स्थापित करके लागू की गई अतिरिक्त सुरक्षा से भी हो सकता है।
मेनफ्रेम में
आईबीएम ने 1963 में ओएस/360 का उपयोग करके मेनफ्रेम कंप्यूटरों में उपयोग के लिए फ़ाइल लॉकिंग की शुरुआत की, जहां इसे विशेष नियंत्रण कहा गया था।[1]
माइक्रोसॉफ्ट विंडोज़ में
Microsoft Windows साझा फ़ाइलों तक पहुंच प्रबंधित करने के लिए तीन अलग-अलग तंत्रों का उपयोग करता है:
- शेयर-एक्सेस नियंत्रणों का उपयोग करना जो एप्लिकेशन को पढ़ने, लिखने या हटाने के लिए संपूर्ण-फ़ाइल एक्सेस-शेयरिंग निर्दिष्ट करने की अनुमति देता है[2]
- एक ही फ़ाइल के भीतर क्षेत्रों तक पढ़ने और लिखने की पहुंच में मध्यस्थता करने के लिए बाइट-रेंज लॉक का उपयोग करना[3]
- विंडोज़ फ़ाइल सिस्टम द्वारा निष्पादित फ़ाइलों को लिखने या हटाने की पहुंच के लिए खोले जाने की अनुमति नहीं दी जा रही है
विंडोज़ को MS-DOS सिस्टम से शेयर-एक्सेस नियंत्रण के शब्दार्थ विरासत में मिले हैं, जहाँ साझाकरण MS-DOS 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 में उत्पन्न हुई, और आज इसे सोलारिस (ऑपरेटिंग सिस्टम), एचपी-यूएक्स और लिनक्स ऑपरेटिंग सिस्टम में देखा जा सकता है। हालाँकि, यह POSIX का हिस्सा नहीं है, और BSD-व्युत्पन्न ऑपरेटिंग सिस्टम जैसे FreeBSD, OpenBSD, NetBSD और Apple का macOS इसका समर्थन नहीं करते हैं।[8] लिनक्स विशेष के माध्यम से अनिवार्य लॉकिंग का भी समर्थन करता है-o mandफ़ाइल सिस्टम माउंटिंग के लिए पैरामीटर (), लेकिन इसका उपयोग शायद ही कभी किया जाता है।
कुछ यूनिक्स जैसे ऑपरेटिंग सिस्टम किसी चल रहे प्रोग्राम की निष्पादन योग्य फ़ाइल को लिखने के लिए खोलने के प्रयासों को रोकते हैं; यह लॉकिंग का तीसरा रूप है, जो इनके द्वारा प्रदान किए गए से अलग है fcntl और flock.
समस्याएँ
एक से अधिक प्रक्रियाएँ किसी विशेष को धारण कर सकती हैं flock किसी दी गई फ़ाइल पर यदि विशेष लॉक बाद में डुप्लिकेट किया गया था fork. यह नेटवर्क सर्वर के लिए कोडिंग को सरल बनाता है और दौड़ की स्थिति को रोकने में मदद करता है, लेकिन अनजान लोगों के लिए यह भ्रमित करने वाला हो सकता है।
अनिवार्य ताले का कोई प्रभाव नहीं पड़ता unlink सिस्टम कॉल. नतीजतन, कुछ प्रोग्राम, प्रभावी ढंग से, अनिवार्य लॉकिंग से बच सकते हैं। स्टीवंस और रैगो (2005) ने देखा कि ed संपादक ने वास्तव में ऐसा किया।[9]
चाहे और कैसे flock नेटवर्क फ़ाइल सिस्टम (प्रोटोकॉल) जैसे नेटवर्क फाइल सिस्टम पर लॉक का काम कार्यान्वयन पर निर्भर है। बीएसडी सिस्टम पर, flock एनएफएस-माउंटेड विभाजन पर फ़ाइल के लिए खुले फ़ाइल डिस्क्रिप्टर पर कॉल सफल एनओपी (कोड)|नो-ऑप्स हैं। 2.6.12 से पहले Linux पर, flock एनएफएस फाइलों पर कॉल केवल स्थानीय रूप से कार्य करेगी। कर्नेल 2.6.12 और उससे ऊपर का कार्यान्वयन flock POSIX बाइट-रेंज लॉक का उपयोग करके NFS फ़ाइलों पर कॉल करता है। ये लॉक लागू करने वाले अन्य एनएफएस क्लाइंट को दिखाई देंगे fcntl-स्टाइल POSIX लॉक, लेकिन जो नहीं करते उनके लिए अदृश्य।[10]
लॉक अपग्रेड और डाउनग्रेड नया लॉक लगाने से पहले पुराने लॉक को हटा देते हैं। यदि कोई एप्लिकेशन किसी विशेष लॉक को साझा लॉक में डाउनग्रेड कर देता है, जबकि कोई अन्य एप्लिकेशन किसी विशेष लॉक के इंतजार में ब्लॉक हो जाता है, तो बाद वाला एप्लिकेशन एक्सक्लूसिव लॉक प्राप्त कर सकता है और पहले एप्लिकेशन को लॉक कर सकता है। इसका मतलब है कि लॉक डाउनग्रेड ब्लॉक कर सकता है, जो प्रति-सहज ज्ञान युक्त हो सकता है।
सभी fcntl किसी दी गई प्रक्रिया के लिए फ़ाइल से जुड़े लॉक तब हटा दिए जाते हैं जब उस फ़ाइल के लिए कोई फ़ाइल डिस्क्रिप्टर उस प्रक्रिया द्वारा बंद कर दिया जाता है, भले ही उस फ़ाइल डिस्क्रिप्टर के लिए लॉक का अनुरोध कभी नहीं किया गया हो। भी, fcntl ताले किसी चाइल्ड प्रक्रिया द्वारा विरासत में नहीं मिले हैं। fcntl ई> बंद शब्दार्थ विशेष रूप से उन अनुप्रयोगों के लिए परेशानी भरा है जो सबरूटीन लाइब्रेरीज़ को कॉल करते हैं जो फ़ाइलों तक पहुंच सकते हैं। इनमें से कोई भी बग वास्तविक उपयोग से उत्पन्न नहीं होता है flock-स्टाइल ताले.
यूनिक्स डोमेन सॉकेट का उपयोग करके किसी अन्य प्रक्रिया में भेजे गए खुले फ़ाइल डिस्क्रिप्टर पर लॉक स्थिति का संरक्षण कार्यान्वयन पर निर्भर है।
बफर्ड I/O समस्याएँ
लॉक विफलता का स्रोत तब होता है जब बफ़र किए गए I/O में ऑपरेटिंग सिस्टम बफ़र पूल के बजाय उपयोगकर्ता के स्थानीय कार्यक्षेत्र में बफ़र्स निर्दिष्ट होते हैं। fread और fwrite आमतौर पर बफर्ड I/O करने के लिए उपयोग किया जाता है, और बार फ़ाइल का अनुभाग पढ़ने के बाद, उसी अनुभाग को पढ़ने का और प्रयास, सबसे अधिक संभावना है, स्थानीय बफर से डेटा प्राप्त करेगा। समस्या यह है कि उसी फ़ाइल से जुड़े किसी अन्य उपयोगकर्ता के पास अपने स्वयं के स्थानीय बफ़र्स हैं, और उनके लिए भी यही हो रहा है। fwrite द्वारा बफ़र से प्राप्त डेटा का fread क्या नहीं फ़ाइल से ही डेटा प्राप्त कर रहा होगा, और कोई अन्य उपयोगकर्ता इसे बदल सकता था। दोनों उपयोग कर सकते थे flock विशिष्ट पहुंच सुनिश्चित करने के लिए, जो साथ लिखने से रोकता है, लेकिन चूंकि रीड्स बफर से पढ़ रहे हैं, न कि फ़ाइल से, उपयोगकर्ता #1 द्वारा बदला गया कोई भी डेटा उपयोगकर्ता #2 (ओवर-राइट) द्वारा खो सकता है। इस समस्या का सबसे अच्छा समाधान अनबफ़र्ड I/O का उपयोग करना है (read और write) साथ flock, जिसका अर्थ उपयोग करना भी है lseek के बजाय fseek और ftell. बेशक, आपको फ़ंक्शन पैरामीटर और लौटाए गए परिणामों के लिए समायोजन करना होगा। सामान्यतया, साझा फ़ाइलों के साथ उपयोग किए जाने पर बफ़र्ड I/O असुरक्षित होता है।
AmigaOS में
AmigaOS में, किसी फ़ाइल (या निर्देशिका) पर लॉक का उपयोग करके प्राप्त किया जा सकता है Lock फ़ंक्शन (में dos.library). लॉक साझा किया जा सकता है (अन्य प्रक्रियाएं फ़ाइल/निर्देशिका को पढ़ सकती हैं, लेकिन इसे संशोधित या हटा नहीं सकती हैं), या विशेष ताकि केवल वह प्रक्रिया जो सफलतापूर्वक लॉक प्राप्त कर ले, ऑब्जेक्ट तक पहुंच या संशोधित कर सके। ताला पूरी वस्तु पर है, उसके किसी भाग पर नहीं। लॉक को इसके साथ जारी किया जाना चाहिए UnLock फ़ंक्शन: यूनिक्स के विपरीत, प्रक्रिया समाप्त होने पर ऑपरेटिंग सिस्टम ऑब्जेक्ट को अंतर्निहित रूप से अनलॉक नहीं करता है।
फ़ाइलें लॉक करें
शैल स्क्रिप्ट और अन्य प्रोग्राम अक्सर फ़ाइल लॉकिंग के उपयोग के समान रणनीति का उपयोग करते हैं: लॉक फ़ाइलों का निर्माण, जो ऐसी फ़ाइलें हैं जिनकी सामग्री अप्रासंगिक है (हालांकि अक्सर फ़ाइल में लॉक के धारक की प्रक्रिया पहचानकर्ता मिल जाएगी) और जिनकी एकमात्र उद्देश्य उनकी उपस्थिति से संकेत देना है कि कुछ संसाधन बंद हैं। यदि नियंत्रित किया जाने वाला संसाधन बिल्कुल भी नियमित फ़ाइल नहीं है, तो लॉक फ़ाइल अक्सर सबसे अच्छा तरीका होता है, इसलिए फ़ाइलों को लॉक करने के तरीकों का उपयोग लागू नहीं होता है। उदाहरण के लिए, लॉक फ़ाइल संबंधित संसाधनों के सेट तक पहुंच को नियंत्रित कर सकती है, जैसे कि कई अलग-अलग फाइलें, निर्देशिकाएं, डिस्क विभाजन का समूह, या सर्वर या डेटाबेस कनेक्शन जैसे उच्च स्तरीय प्रोटोकॉल तक चयनित पहुंच।
लॉक फ़ाइलों का उपयोग करते समय, यह सुनिश्चित करने के लिए ध्यान रखा जाना चाहिए कि संचालन परमाणु (कंप्यूटर विज्ञान) है। लॉक प्राप्त करने के लिए, प्रक्रिया को यह सत्यापित करना होगा कि लॉक फ़ाइल मौजूद नहीं है और फिर इसे बनाएं, जबकि इस बीच किसी अन्य प्रक्रिया को इसे बनाने से रोकें। ऐसा करने के विभिन्न तरीकों में शामिल हैं:
- का उपयोग
lockfileकमांड (एक सशर्त सेमाफोर-फ़ाइल निर्माता में वितरित किया गयाprocmailपैकेट)। - सिस्टम कॉल जो फ़ाइल बनाती है, लेकिन यदि फ़ाइल पहले से मौजूद है तो विफल हो जाती है। (सिस्टम कॉल C या C++ जैसी भाषाओं से उपलब्ध हैं, और शेल स्क्रिप्ट noclobber का उपयोग कर सकती हैं)
- का उपयोग
mkdirआदेश दें और विफलता के लिए निकास कोड की जाँच करें[11]
लॉक फ़ाइलों को अक्सर टिल्ड नाम दिया जाता है (~) जिस फ़ाइल को वे लॉक कर रहे हैं उसके नाम के पहले लगा दिया गया है, या पूरे फ़ाइल नाम का डुप्लिकेट लगा दिया गया है .LCK. यदि वे फ़ाइल के अलावा किसी अन्य संसाधन को लॉक कर रहे हैं, तो उन्हें अधिक मनमाने ढंग से नाम दिया जा सकता है।
कुछ mozilla उत्पाद (जैसे फ़ायरफ़ॉक्स, थंडरबर्ड, सनबर्ड) इस प्रकार के फ़ाइल संसाधन लॉक तंत्र का उपयोग करते हैं (parent.lock नामक अस्थायी फ़ाइल का उपयोग करके)।
अनलॉकर सॉफ्टवेयर
अनलॉकर उपयोगिता है जिसका उपयोग यह निर्धारित करने के लिए किया जाता है कि कौन सी प्रक्रिया किसी फ़ाइल को लॉक कर रही है, और प्रक्रियाओं की सूची के साथ-साथ प्रक्रिया के साथ क्या करना है (किल टास्क, अनलॉक इत्यादि) के साथ-साथ फ़ाइल विकल्पों की सूची भी प्रदर्शित करती है। हटाएं या नाम बदलें. कुछ यूनिक्स-जैसी प्रणालियों पर, उपयोगिताएँ जैसे 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 "
CreateFileWfunction". Windows Software Development Toolkit. Microsoft Docs. windows-sdk-content. Microsoft Corporation. Retrieved 2018-11-07. - ↑ "
LockFileExfunction". Windows Software Development Toolkit. Microsoft Docs. windows-sdk-content. Microsoft Corporation. Retrieved 2018-11-07. - ↑ "
LockFileExfunction". Windows Software Development Toolkit. Microsoft Docs. windows-sdk-content. Microsoft Corporation. Retrieved 2020-07-05. - ↑ "
LockFilefunction". 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 POSIX locks, a LWN.net article on file locks supported on Linux that behave differently from POSIX locks regarding inheritance and behavior on close