2009-04-22 18 views
5

यदि मेरी प्रक्रियाओं में से कोई एक फ़ाइल खोलती है, तो हम केवल पढ़ने के लिए कहें, क्या ओएस गारंटी देता है कि मैं पढ़ रहा हूं, कोई अन्य प्रक्रिया उस पर लिख नहीं सकती है, शायद रीडिंग प्रक्रिया को पहले भाग के साथ छोड़कर पुराने फ़ाइल संस्करण, और नए फ़ाइल संस्करण के दूसरे भाग, डेटा अखंडता संदिग्ध बनाने?एकाधिक प्रक्रियाओं पर फ़ाइलें

मैं उन पाइपों के बारे में बात नहीं कर रहा हूं जिनके पास कोई तलाश नहीं है, लेकिन नियमित फाइलों पर, विकल्प तलाशने के साथ (कम से कम जब केवल एक प्रक्रिया के साथ खोला जाता है)।

उत्तर

3

नहीं है, अन्य प्रक्रियाओं फ़ाइल की सामग्री को बदल सकते हैं के रूप में आप यह पढ़ रहे हैं। "मैनुअल एफसीएनटीएल" और चलाने का प्रयास करें "सलाहकार" ताले के अनुभाग को अनदेखा करें; वे "वैकल्पिक" ताले हैं जो प्रक्रियाओं को केवल तभी ध्यान देना पड़ता है जब वे चाहते हैं। इसके बजाए, (अलास, गैर-पॉज़िक्स) "अनिवार्य" ताले की तलाश करें। वे वे हैं जो आपको अन्य कार्यक्रमों से बचाएंगे। एक पठन लॉक आज़माएं।

+0

मेरी राय में अनिवार्य ताले एक वांछनीय विशेषता नहीं हैं :) – MarkR

+0

सहमत! एक बेहतर आवेदन डिजाइन बेहतर होगा। लेकिन, अगर उन्हें पाठकों के खिलाफ फाइल की रक्षा करना है तो वह नियंत्रण नहीं कर सकते हैं, वे ही जाने का एकमात्र तरीका हैं। –

2

नहीं, अगर आप कोई फ़ाइल खोलते हैं, तो अन्य प्रक्रियाएं इसे तब तक लिख सकती हैं जब तक कि आप लॉक का उपयोग न करें।

लिनक्स पर, आप एक सलाहकार ताला एक फ़ाइल पर साथ जोड़ सकते हैं:

#include <sys/file.h> 

... 

flock(file_descriptor,LOCK_EX); // apply an advisory exclusive lock 
+2

सलाहकार ताले उपयोगी नहीं हैं जब तक कि लेखन आवेदन भी उनका उपयोग करने के लिए सहमत न हो। –

+0

सलाहकार ताले पर्याप्त हैं यदि आपको आश्वस्त किया जाता है कि शामिल प्रत्येक पार्टी उन्हें सुन रही है। इसके अलावा, लॉक जारी होने की प्रतीक्षा करते समय एक प्रक्रिया ब्लॉक होने पर संभावित डेडलॉक समस्याओं से अवगत रहें। – jiggy

+2

अनिवार्य ताले हमेशा संभव नहीं होते हैं। उदाहरण के लिए, आपको "-o mand" के साथ माउंट करना पड़ सकता है और फ़ाइल पर कुछ झंडे बदल सकते हैं। – Zifre

2

कोई भी प्रक्रिया जो फ़ाइल लिखने के लिए खोल सकती है, उसे लिख सकती है। लेखन आपके स्वयं के लेखन के साथ समवर्ती रूप से हो सकते हैं, जिसके परिणामस्वरूप (संभावित रूप से) अनिश्चित राज्य होते हैं।

यह सुनिश्चित करने के लिए एक आवेदन लेखक के रूप में आपकी ज़िम्मेदारी है कि खराब चीजें नहीं होती हैं। मेरी राय में अनिवार्य लॉकिंग एक अच्छा विचार नहीं है।

एक बेहतर विचार उन प्रक्रियाओं को लिखने की अनुमति नहीं देना है जिन्हें आप फ़ाइल में लिखना नहीं चाहते हैं।

यदि कई प्रक्रियाएं एक फ़ाइल खोलती हैं, तो उनके पास स्वतंत्र फ़ाइल पॉइंटर्स होंगे, इसलिए वे एक दूसरे को प्रभावित कर सकते हैं() और एक दूसरे को प्रभावित नहीं कर सकते हैं।

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

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