यह एक फ़ाइल के अंत में एक अतिरिक्त न्यूलाइन जोड़ने के बारे में नहीं है, यह उस नईलाइन को हटाने के बारे में नहीं है जो वहां होनी चाहिए।
एक पाठ फ़ाइल , यूनिक्स के तहत, लाइनों की एक श्रृंखला होती है , जिनमें से प्रत्येक एक नई पंक्ति वर्ण ( \n
) के साथ समाप्त होती है । एक फ़ाइल जो खाली नहीं है और एक नई पंक्ति के साथ समाप्त नहीं होती है इसलिए पाठ फ़ाइल नहीं है।
पाठ फ़ाइलों पर संचालित होने वाली उपयोगिताएँ उन फ़ाइलों के साथ अच्छी तरह से सामना नहीं कर सकती हैं जो एक नई पंक्ति के साथ समाप्त नहीं होती हैं; ऐतिहासिक यूनिक्स उपयोगिताओं उदाहरण के लिए, अंतिम नई पंक्ति के बाद पाठ को अनदेखा कर सकती है। GNU उपयोगिताओं में गैर-पाठ फ़ाइलों के साथ शालीनता से व्यवहार करने की नीति है, और इसलिए अधिकांश अन्य आधुनिक उपयोगिताओं हैं, लेकिन आप अभी भी उन फाइलों के साथ अजीब व्यवहार का सामना कर सकते हैं जो एक अंतिम newline¹ याद कर रहे हैं।
जीएनयू के साथ, अगर एक फाइल की तुलना एक न्यूलाइन के साथ हो रही है, लेकिन दूसरी नहीं है, तो उस तथ्य को नोट करना सावधानी है। चूंकि अंतर लाइन-ओरिएंटेड है, यह फाइलों में से किसी एक के लिए एक नई लाइन को स्टोर करके इसे इंगित नहीं कर सकता है, लेकिन दूसरों के लिए नहीं - नईलाइन यह इंगित करने के लिए आवश्यक है कि कहां से अलग फाइल शुरू और समाप्त होती है। तो \ No newline at end of file
एक फ़ाइल में अंतर करने के लिए इस विशेष पाठ का उपयोग करें जो एक फ़ाइल से एक नई पंक्ति में समाप्त नहीं हुआ था।
वैसे, सी संदर्भ में, स्रोत फ़ाइल में समान रूप से लाइनों की एक श्रृंखला होती है। अधिक सटीक रूप से, एक अनुवाद इकाई को कार्यान्वयन-परिभाषित लाइनों की एक श्रृंखला के रूप में देखा जाता है, जिनमें से प्रत्येक को एक नई पंक्ति वर्ण ( n1256 n5.1.1.1) के साथ समाप्त होना चाहिए । यूनिक्स प्रणालियों पर, मानचित्रण सीधा है। डॉस और विंडोज पर, प्रत्येक सीआर एलएफ अनुक्रम ( \r\n
) को एक नई पंक्ति में मैप किया जाता है ( \n
, यह हमेशा ऐसा होता है जब इन ओएस पर पाठ के रूप में खोली गई फ़ाइल को पढ़ते हुए)। कुछ OS ऐसे हैं, जिनमें एक नई पंक्ति नहीं है, लेकिन इसके बजाय निश्चित हैं- या चर-आकार के रिकॉर्ड; इन प्रणालियों पर, फ़ाइलों से सी स्रोत पर मैपिंग एक परिचय\n
प्रत्येक रिकॉर्ड के अंत में। हालांकि यह यूनिक्स के लिए सीधे प्रासंगिक नहीं है, इसका मतलब यह है कि यदि आप एक सी स्रोत फ़ाइल की प्रतिलिपि बनाते हैं जो रिकॉर्ड-आधारित पाठ फ़ाइलों के साथ सिस्टम में इसकी अंतिम नई लाइन को याद कर रही है, तो इसे वापस कॉपी करें, आप या तो अपूर्ण के साथ समाप्त हो जाएंगे पिछली पंक्ति को प्रारंभिक रूपांतरण में काट दिया गया था, या रिवर्स रूपांतरण के दौरान इस पर एक अतिरिक्त नई रेखा से निबटा गया था।
¹
उदाहरण: GNU सॉर्ट का आउटपुट हमेशा एक नई रेखा के साथ समाप्त होता है। इसलिए यदि फ़ाइल foo
अपनी अंतिम नई लाइन को याद कर रही है, तो आप पाएंगे कि sort foo | wc -c
एक से अधिक वर्णों की रिपोर्ट करता है cat foo | wc -c
।