2010-01-14 12 views
7

का उपयोग करना:एक साथ फ़ाइल एक्सेस

fopen 
fwrite 
fclose 

दो उपयोगकर्ताओं को एक ही समय में एक ही फ़ाइल को खोलने का प्रयास करता है, तो क्या होता है?

+4

मुझे यकीन नहीं है कि सही उत्तर है। लेकिन हाँ, किसी ने कोशिश की है। –

+0

ऑपरेटिंग सिस्टम पर भी निर्भर करता है। –

+1

यह पूरे कारण है कि MySQL 3.x वेब विकास के शुरुआती दिनों में इतना लोकप्रिय हो गया। –

उत्तर

6

छोटे पैमाने पर फ़ाइल ऑपरेशन इतने तेज़ हैं कि एक ही समय में दो लिखते हैं काफी दुर्लभ हैं। भले ही, आप फ़ाइल को लॉक करने के flock उपयोग कर सकते हैं:

$fp = fopen('file.log', 'a+'); 
flock($fp, LOCK_EX); 
fwrite($fp, 'my data'); 
flock($fp, LOCK_UN); 
fclose($fp); 

नोट fclose स्वचालित रूप से फ़ाइल बातें बताता है, लेकिन मुझे लगता है यह कोड थोड़ा और अधिक उपयोगकर्ता के अनुकूल में इन बातों को डाल करने के लिए बनाता है

+0

+1, संक्षेप में ... मेरे वफ़ल की तरह नहीं! –

+0

क्या होगा यदि दुभाषिया फ़ाइल को लॉक करता है लेकिन उसके बाद इसे अनलॉक करने से पहले सर्वर मर जाता है, तो इसे अनलॉक नहीं किया जाएगा? :) – ajsie

+0

@noname - Yup। लॉकिंग सिस्टम को अक्सर मध्यस्थता, सर्वसम्मति प्राप्त करने और इन चीजों से निपटने के लिए होता है। –

1

हाँ आप एक ही समय में दो फाइलें खोल सकते हैं जब तक कि आप फ़ाइल [झुंड] को लॉक न करें। फिर भी, फ़ाइल को फ़्लॉक करने का सबसे अच्छा समय तब होगा जब आप इसे लिख रहे हों, या यदि आप किसी उपयोगकर्ता को किसी भी बिंदु पर फ़ाइल देखने की अनुमति देते हैं।

3

क्या महत्वपूर्ण है:

  1. जब वे लिखते हैं
  2. क्या होगा यदि (क) पढ़ता है तो क्या होता है, (ख) पढ़ता है तो (ख), फिर लिखते हैं (क) लिखता है? क्या (ए) का लेखन अमान्य है क्योंकि इसकी गणना अब नवीनतम स्थिति से ली गई है?

क्लासिक उदाहरण कई ग्रंथों में प्रयोग किया जाता Cash machine/bank balance उदाहरण है।

किसी भी तरह का लिखने योग्य राज्यसमवर्ती अभिगम नियंत्रण इस तरह के एक mutex के रूप में के कुछ फार्म की आवश्यकता है साझा है, लेकिन संभावित समस्याओं के टन देखते हैं जैसे race conditions, भुखमरी और dining philosophers problem में बदलाव।

कई ऑपरेटिंग सिस्टम हालांकि File locking कुछ विवरणों की अनुमति देते हैं, जिसका अर्थ है कि दूसरी प्रक्रिया लॉक को रिलीज़ होने की प्रतीक्षा करती है। PHP's flock() for locking a file.

आप "चेकआउट, परिवर्तन, प्रतिबद्ध/विलय" दृष्टिकोण का भी उपयोग कर सकते हैं।

अपने कारणों के आधार पर आप एक डेटाबेस जैसे MySQL या SQLite इन के रूप में तेज, और अधिक मजबूत राज्य है जो पढ़ने के लिए भारी या कैश-लेस साझा करने के तरीके प्रदान करेगा विचार कर सकते हैं।

कई समस्याएं, नुकसान और राज्य साझा करने के तरीके विशाल हैं। सभी विकिपीडिया उपयोग के लिए माफ़ी।

1

हर समय होता है। हालांकि आपके प्रश्न का उत्तर इस बात पर निर्भर करता है कि खुले फ़ाइल के साथ वास्तव में क्या करना चाहते हैं। संभावित क्रियाएं/समाधान पूरी तरह से इस आवश्यकता पर निर्भर करेगा।

3

FILE_APPEND या LOCK_EX झंडे के साथ file_put_contents() का उपयोग करें।

इनमें से कोई भी झंडे फ़ाइल को लिखने के लिए लॉक करता है।

संबंधित मुद्दे