यूनिक्स सिस्टम द्वारा और बड़े अनिवार्य ताले से बचते हैं। ऐसे कुछ मामले हैं जहां कर्नेल उपयोगकर्ता प्रोग्राम द्वारा संशोधनों के खिलाफ एक फ़ाइल को लॉक कर देगा, लेकिन ऐसा नहीं है यदि यह केवल किसी अन्य प्रोग्राम द्वारा लिखा जा रहा है। कोई भी यूनिक्स सिस्टम किसी फाइल को लॉक नहीं करेगा क्योंकि एक प्रोग्राम इसे लिख रहा है।
यदि आप अपनी स्क्रिप्ट के समवर्ती उदाहरणों को एक-दूसरे के पैर की उंगलियों पर नहीं चलना चाहते हैं, तो आपको एक स्पष्ट लॉकिंग तंत्र का उपयोग करने की आवश्यकता है ।flock
lockfile
जब आप एक फ़ाइल को जोड़ने के लिए खोलते हैं, जो >>
करता है, तो प्रत्येक प्रोग्राम को हमेशा फ़ाइल के अंत में लिखने की गारंटी दी जाती है। इसलिए कई उदाहरणों का आउटपुट कभी भी एक-दूसरे को अधिलेखित नहीं करेगा, और यदि वे लिखने के लिए बदल जाते हैं, तो उनका आउटपुट उसी क्रम में होगा जैसा कि लिखते हैं।
अगर ऐसा हो सकता है तो बुरी बात यह है कि उदाहरणों में से एक आउटपुट के कई हिस्से लिखता है और उनसे एक साथ आने की उम्मीद करता है। एक उदाहरण से लिखने वालों के बीच, अन्य उदाहरण अपने स्वयं के लेखन का प्रदर्शन कर सकते हैं। उदाहरण के लिए, यदि उदाहरण 1 लिखता है foo
, तो उदाहरण 2 लिखता है hello
और केवल उदाहरण 2 लिखता है bar
, तो फ़ाइल शामिल होगी foohellobar
।
एक प्रक्रिया प्रभावी ढंग से फाइल को लिखती है जब वह write
सिस्टम कॉल को कॉल करती है। एक कॉल write
परमाणु है: प्रत्येक कॉल write
बाइट्स का एक क्रम लिखने के लिए जो अन्य कार्यक्रमों द्वारा बाधित नहीं होगी। write
प्रभावी रूप से लिखने के लिए किसी एकल कॉल को कितना डेटा देना है, इसकी एक सीमा होती है : बड़े आकारों के लिए, केवल डेटा की शुरुआत लिखी जाती है, और एप्लिकेशन को write
फिर से कॉल करना होगा । इसके अलावा, कई कार्यक्रम बफरिंग करते हैं: वे एक मेमोरी क्षेत्र में डेटा जमा करते हैं, फिर इस डेटा को एक चंक में लिखते हैं। कुछ प्रोग्राम एक पूरी लाइन या अन्य सार्थक पृथक्करण के बाद आउटपुट बफर को फ्लश करते हैं। ऐसे कार्यक्रमों के साथ, आप पूरी लाइनों को निर्बाध होने की उम्मीद कर सकते हैं, जब तक कि वे बहुत लंबे समय तक न हों (कुछ थियोबाइट्स तक; यह ओएस पर निर्भर करता है)। यदि प्रोग्राम सार्थक स्थानों पर नहीं बहता है, लेकिन केवल बफर आकार पर आधारित है, तो आप एक उदाहरण से 4kB की तरह कुछ देख सकते हैं, फिर दूसरे उदाहरण से 4kB, फिर पहली बार से 4kB और इसी तरह।