यदि हम उपयोग करते हैं echo 1234 >> some-fileतो प्रलेखन कहता है कि आउटपुट संलग्न है।
मेरा अनुमान है कि, यदि कुछ फ़ाइल मौजूद नहीं है, तो O_CREAT एक नई फ़ाइल बनाएगा। यदि >उपयोग किया गया था, तो O_TRUNC मौजूदा फ़ाइल को छोटा कर देगा।
के मामले में >>: क्या फ़ाइल को O_WRONLY (या O_RDWR) के रूप में खोला जाएगा और O_APPEND का अनुकरण करते हुए ऑपरेशन को समाप्त करने और लिखने की कोशिश की जाती है? या फ़ाइल O_APPEND के रूप में खोली जाएगी, यह सुनिश्चित करने के लिए कर्नेल को छोड़ कर कि क्या होता है?
मैं यह इसलिए पूछ रहा हूं क्योंकि एक विजेता प्रक्रिया ईको द्वारा डाले गए कुछ मार्करों को ओवरराइट कर रही है, जब आउटपुट फाइल एनएफएस माउंट पॉइंट से होती है, और एनएफएस डॉक्यूमेंटेशन का कहना है कि सर्वर पर O_APPEND समर्थित नहीं है, इसलिए क्लाइंट कर्नेल को इसे संभालना होगा। मुझे लगता है कि विजेता प्रक्रिया O_APPEND का उपयोग कर रही है, लेकिन >>लिनक्स पर बैश के बारे में सुनिश्चित नहीं है , इसलिए यहां सवाल पूछ रहा है।
O_APPENDसमर्थित नहीं है; समस्या इसका अनुकरण है। एक स्थानीय फ़ाइल सिस्टम पर, एक ही फ़ाइल के साथ लिखने वाली कई प्रक्रियाएंO_APPENDकभी भी एक-दूसरे के डेटा को अधिलेखित नहीं करेंगी; एनएफएस पर,O_APPENDलिखने से पहले अंत की मांग करके अनुकरण किया जाता है, जो दौड़ की स्थिति की संभावना को छोड़ देता है। एनएफएस पर इसके आसपास कोई रास्ता नहीं है; प्रत्येक समानांतर लेखक को अपनी फ़ाइल लिखने की आवश्यकता होती है। इसके चारों ओर काम करने का एकमात्र तरीका एनएफएस सर्वर पर एक सर्वर प्रक्रिया सेटअप है, लॉग करने वालों को लॉग इन करना है|nc server port, और सर्वर में लॉग में आने वाले डेटा को जोड़ना है।