लिनक्स न्यूफ़ वर्ण के रूप में LF का उपयोग क्यों करता है?


87

जहां तक ​​मुझे पता है, हर ऑपरेटिंग सिस्टम के पास लाइन (ईओएल) वर्ण के अंत को चिह्नित करने का एक अलग तरीका है। वाणिज्यिक ऑपरेटिंग सिस्टम ईओएल के लिए कैरिज रिटर्न (विंडोज पर कैरिज रिटर्न और लाइन फीड, केवल मैक पर कैरिज रिटर्न) का उपयोग करते हैं। दूसरी ओर, लिनक्स, EOL के लिए लाइन फीड का उपयोग करता है।

लिनक्स ईओएल (और इसके बजाय केवल लाइन फीड) के लिए गाड़ी वापसी का उपयोग क्यों नहीं करता है?


77
Mac ने OS X से पहले केवल CR का उपयोग नहीं किया है ... अब * nix style LF का उपयोग करें, मुझे विश्वास है।
बी लेयर

33
मुझे लगता है कि कई वाणिज्यिक यूनिक्स OS: s भी हैं / हैं।
14लक्कू

20
विकिपीडिया पर समझाया गया । मूल रूप से 60 के दशक में मल्टीिक्स (जो यूनिक्स से प्रेरित है, जिसने लिनक्स को प्रेरित किया) ने टेस्टिकल डिवाइसों की सीमाओं से घिरे होने वाले टेक्स्ट एन्कोडिंग से बचने के लिए एब्सट्रैक्शन के कुछ स्तर जोड़े ताकि इसे दो अक्षरों पर नई रेखा को एनकोड न करना पड़े (जो इसे और भी कम बनाता है) भावना 50 साल बाद)।
स्टीफन चेज़लस

74
दूसरा पैराग्राफ एक वैध प्रश्न है, लेकिन पहला पैराग्राफ ओवरसिंबलाइजेशन और एकमुश्त त्रुटियों से भरा हुआ है, जो इसे बाहर निकाल रहा है, साथ ही उत्तरदाताओं को इफ्फी और दोषपूर्ण परिसर के एक पूरे झुंड को सही करने से पहले वे भी प्रश्न पर पहुंचते हैं।
जेडेबीपी

21
क्या? लिनक्स UNIX नामक एक वाणिज्यिक OS मानक का एक मुफ्त सन्निकटन है। UNIX- आज्ञाकारी प्रणालियों की लागत तब बहुत पैसा लगाती है और वे आज भी करते हैं।
कंजूसिंग्लिस्ट

जवाबों:


334

विंडोज का उपयोग करता है CRLFक्योंकि यह एमएस-डॉस से विरासत में मिला है।

MS-DOS का उपयोग करता है CRLFक्योंकि यह CP / M से प्रेरित था जो पहले से ही उपयोग कर रहा था CRLF

सीपी / एम और अस्सी के दशक से कई ऑपरेटिंग सिस्टम और पहले इस्तेमाल किया CRLFगया था क्योंकि यह एक टेलेटाइप पर छपी एक पंक्ति को समाप्त करने का तरीका था (नियमित रूप से टाइपराइटर की तरह लाइन की शुरुआत में और अगली पंक्ति पर कूदें)। यह एक फ़ाइल को सरल बनाता है क्योंकि इसमें कम या कोई पूर्व-प्रसंस्करण की आवश्यकता नहीं होती है। यांत्रिक आवश्यकताएं भी थीं जिन्होंने एक एकल चरित्र को प्रयोग करने योग्य होने से रोका। कुछ समय के लिए गाड़ी को वापस जाने और पलटन को घूमने की अनुमति देने की आवश्यकता हो सकती है

Gnu / Linux उपयोग करता है LFक्योंकि यह एक यूनिक्स क्लोन है1

यूनिक्स ने LFअंतरिक्ष को बचाने के लिए शुरुआत से ही एक एकल चरित्र का उपयोग किया और एक कैनोनिकल एंड-ऑफ-लाइन के मानकीकरण के लिए, दो वर्णों का उपयोग करना अक्षम और अस्पष्ट था। यह विकल्प मल्टिक्स से विरासत में मिला था, जो 1964 की शुरुआत में इस्तेमाल किया गया था। मेमोरी, स्टोरेज, सीपीयू पावर और बैंडविड्थ बहुत कम थे, इसलिए प्रति पंक्ति एक बाइट की बचत करना लायक था। जब एक फ़ाइल मुद्रित की गई थी, तो चालक लक्ष्य डिवाइस द्वारा आवश्यक नियंत्रण वर्णों को लाइन फीड (नई-लाइन) परिवर्तित कर रहा था।

LFपसंद किया गया था CRक्योंकि बाद में अभी भी एक विशिष्ट उपयोग किया गया था। एक ही पंक्ति की शुरुआत में मुद्रित चरित्र को निरूपित करके, यह पहले से ही टाइप किए गए पात्रों को ओवरस्ट्रेक करने की अनुमति देता है।

Apple ने शुरू में एक ही चरित्र का उपयोग करने का फैसला किया था लेकिन किसी कारण से दूसरे को चुना CR:। जब यह BSD इंटरफ़ेस में बदल गया, तो यह स्थानांतरित हो गया LF

इन विकल्पों का इस तथ्य से कोई लेना-देना नहीं है कि OS व्यावसायिक है या नहीं।

1 यह आपके प्रश्न का उत्तर है।


20
मल्टिक्स ने समकालीन ISO / IEC 646 के साथ समझौते में Line Feed का उपयोग किया, जिसने इसे एक कैरक्टर रिटर्न और लाइन फीड दोनों को एक साथ एक एकल चरित्र में दर्शाया, यदि एक-चरित्र प्रतिनिधित्व की आवश्यकता थी।
जेडीबीपी

10
मुझे संदेह है कि एकल चरित्र चुनने का असली कारण अंतरिक्ष को बचाना था। असली कारण एक एकल न्यूलाइन वर्ण को परिभाषित करना था जो आउटपुट डिवाइस (टर्मिनल, आदि) से स्वतंत्र है। टर्मिनल (या समान) ड्राइवर फिर एप्रीप्रिएट कंट्रोल चरित्र अनुक्रम, आमतौर पर सीआर एलएफ के लिए न्यूलाइन को बदलने का ख्याल रखता है। स्ट्रिंग्स के साथ प्रोग्रामिंग करते समय यह एक अच्छा अमूर्तता की अनुमति देता है: न्यूलाइन को \nकुछ विशेष आउटपुट डिवाइस के स्वतंत्र रूप से एकल के साथ प्रस्तुत किया जाता है।
जोहान मायरेन

14
बहरहाल, 1970 का साल्टज़र और ओस्सन्ना (मल्टीनिक्स में रिमोट टर्मिनल कैरेक्टर स्ट्रीम प्रोसेसिंग ) द्वारा स्पष्ट है कि डिवाइस की स्वतंत्रता का कारण था
जेडीबीपी

3
@ जेडीबीपी यह पेपर बताता है कि दूरदराज के टर्मिनलों से गुजरने वाले पात्रों की धारा के विहित रूप में कमी इस पेपर का विषय है । एक कैनोनिकल फॉर्म को कम करना अंतरिक्ष (भी) को बचाने का एक तरीका था। अलग तरह से व्यक्त, दो वर्णों का उपयोग करना अंतरिक्ष का एक अक्षम और अस्पष्ट अपशिष्ट था।
jlliagre

46
और टेलेटिप को यह गैर-इलेक्ट्रिक टाइपराइटरों से मिला। CR-LF आपके द्वारा लीवर को धक्का देने पर आपके द्वारा की जाने वाली यांत्रिक क्रिया का वर्णन करता है। "कैरिज" लौटें, जो प्लेटन (रोलर) को दायीं ओर वापस रखती है (जो बायीं तरफ कीस्ट्रीक को पहली स्थिति में रखता है) और अगली टाइप करने योग्य लाइन पर जाने के लिए प्लैटन एक लाइन की ऊँचाई को क्रैंक करें। हां, मैं यहां अपनी उम्र दिखा रहा हूं।
cdkMoose

17

"न्यूलाइन" पर विकिपीडिया लेख 1964 में मल्टिक्स के लिए एक लाइन टर्मिनेटर (या विभाजक) के रूप में एनएल की पसंद का पता लगाता है; दुर्भाग्य से लेख में सूत्रों के हवाले से कुछ उद्धरण हैं लेकिन इस पर संदेह करने का कोई कारण नहीं है। CR-LF पर इस विकल्प के दो स्पष्ट लाभ हैं: अंतरिक्ष की बचत, और डिवाइस की स्वतंत्रता।

मुख्य विकल्प, सीआर-एलएफ, नियंत्रण कोड में उत्पन्न होता है जो एक टेलेटाइप मशीन पर भौतिक रूप से कागज की गाड़ी को स्थानांतरित करने के लिए उपयोग किया जाता है, जहां सीआर अपने घर की स्थिति में गाड़ी को वापस कर देगा, और एलएफ पेपर रोलर को प्रिंट स्थिति में ले जाने के लिए घुमाएगा। लाइन। दो नियंत्रण वर्ण ITA2 कोड में दिखाई देते हैं, जो 1924 की है और जो जाहिर तौर पर अभी भी उपयोग में है (विकिपीडिया देखें); जाहिरा तौर पर ITA2 उन्हें Baudot कोड के Murray वैरिएंट से ले गया, जो 1901 की है।

छोटे पाठकों के लिए यह ध्यान देने योग्य है कि मेनफ्रेम परंपरा में, कोई नया चरित्र नहीं था; बल्कि एक फ़ाइल रिकॉर्ड का एक अनुक्रम था जो या तो निश्चित लंबाई (अक्सर 80 वर्ण, छिद्रित कार्ड के आधार पर) या चर लंबाई थी; चर लंबाई रिकॉर्ड आमतौर पर प्रत्येक रिकॉर्ड की शुरुआत में एक चरित्र गणना के साथ संग्रहीत किए गए थे। यदि आपके पास एक मेनफ्रेम फ़ाइल है जिसमें चर लंबाई के अनुक्रम से युक्त प्रत्येक में मनमाना बाइनरी सामग्री होती है, तो इस दोषरहित रूप से UNIX- शैली फ़ाइल में परिवर्तित करना एक मुश्किल रूपांतरण हो सकता है।

लिनक्स, ज़ाहिर है, यूनिक्स का सिर्फ एक पुन: कार्यान्वयन था, और यूनिक्स ने मल्टीिक्स से अपने कई डिज़ाइन निर्णय लिए, इसलिए ऐसा लगता है कि मुख्य निर्णय 1964 में किया गया था।


12

अन्य उत्तरों ने वंशानुक्रम श्रृंखला को 1960 के दशक में वापस ले लिया है, और टेलेटिप्स। लेकिन यहाँ एक पहलू है कि वे कवर नहीं किया था।

टेलेटाइप्स के दिनों में, ऐसे समय थे जब ओवरस्ट्रीकिंग नामक कुछ करना वांछनीय था। ओवरस्ट्रीकिंग का उपयोग कभी-कभी एक पासवर्ड को अस्पष्ट करने के लिए किया जाता था, क्योंकि पासवर्ड को मिटाना केवल उल्लेखनीय नहीं था। दूसरी बार, एक प्रतीक जो फ़ॉन्ट में नहीं था, प्राप्त करने के लिए ओवरस्ट्रिकिंग किया गया था। उदाहरण के लिए, ओ अक्षर और एक स्लैश एक नए प्रतीक का उत्पादन करते हैं।
ओवरस्ट्रीकिंग को बिना लाइन फीड के कैरिज रिटर्न में डाल दिया गया था, हालांकि कभी-कभी बैकस्पेस का इस्तेमाल किया जाता था। इस कारण से, यूनिक्स लोगों ने लाइन विभाजक के रूप में गाड़ी वापसी के खिलाफ फैसला किया, और इसके बजाय लाइन फीड के लिए चुना। यह CRLF सम्मेलन का उपयोग करके उत्पादित ग्रंथों को पढ़ने के लिए भी अच्छी तरह से काम करता है। सीआर निगल जाता है, और LF विभाजक बन जाता है।


इस सटीक स्मृति के लिए धन्यवाद। बैकस्पेस और कैरिज रिटर्न (अकेले) का उपयोग प्रिंटर पर भी बोल्ड या रेखांकित पात्रों के निर्माण के लिए किया गया था। और मूल में वापस जाने के लिए, ये दो कमांड पहले से ही 1930 में अस्तित्व में थे, "कैरिज" "वापसी" को अपनी बाईं स्थिति में लाने के लिए, या तो ओवरस्ट्रीक करने के लिए या "नई लाइन" की मदद से एक नई लाइन शुरू करने की अनुमति देने के लिए। कुंजी जिसने रोलर को एक कदम घुमाया। देखें: en.wikipedia.org/wiki/IBM_Electric_typewriter । इसलिए "CR" + "LF" कंप्यूटर इतिहास से पहले डेटिंग कर रहे हैं।
डेन

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

"टेलेटिप्स के दिन" कंप्यूटर युग से पहले शुरू होते हैं। 1960 के दशक में कई कंप्यूटरों में ऑपरेटर के लिए कंसोल टेलेटाइप था, और एएससीआईआई का उपयोग उनके चरित्र सेट के रूप में भी किया जाता था।
वाल्टर मिती

7

जब आप सी भाषा के बारे में एक प्रश्न में ऐतिहासिक प्रश्न का अनुवाद कर सकते हैं, तो इसका कारण यह है कि लिनक्स और सभी POSIX- अनुरूपण या POSIX-ish सिस्टम का उपयोग करना चाहिएLF (या कम से कम C '\n'वर्ण जो भी हो ) न्यूलाइन चौराहे का एक परिणाम है C और POSIX की आवश्यकताओं के अनुसार। हालांकि C "पाठ फ़ाइलों" और "बाइनरी फ़ाइलों" को अलग-अलग करने की अनुमति देता है (वास्तव में पाठ फ़ाइलों को रिकॉर्ड-आधारित किया जा सकता है, जिसमें लाइन रिकॉर्ड के अनुक्रम शामिल हैं, इसके अलावा, डॉस / विंडोज पर / जैसे / जैसे '\n'अनुवादित होने के लिए कम विदेशी चीजें हैं । ), POSIX अनिवार्य है कि पाठ और बाइनरी मोड एक ही व्यवहार करें। यह काफी हद तक कारण है कि कमांड लाइन उपकरण पसंद करते हैंCRLFcatशक्तिशाली / उपयोगी हैं; यदि वे केवल बाइनरी के साथ काम करते हैं, या केवल पाठ के साथ, लेकिन दोनों नहीं तो वे बहुत कम होंगे।


13
यह विकल्प कई वर्षों से POSIX से पहले का है। जैसा कि जेलीग्रे के जवाब में उल्लेख किया गया है, यह यूनिक्स की शुरुआत में वापस जाता है, जिसने इसे मल्टीिक्स से कॉपी किया।
बरमार

4
लिनक्स में पसंद कई सालों से POSIX से पहले नहीं है। बेशक POSIX संहिताबद्ध था जो पहले से ही विद्यमान था, क्योंकि उसके अस्तित्व में होने का पूरा कारण था।
आर ..

जहां तक ​​लिनक्स की बात है, तो पहली जगह बनाने के लिए कोई वास्तविक विकल्प नहीं था। लिनक्स द्वारा उपयोग की जाने वाली ग्नू मानक लाइब्रेरी पोसिक्स के लिए समकालीन है, और स्पष्ट अनुकूलता कारणों के लिए इसकी स्थापना के बाद से लाइन-फीड का उपयोग कर रही थी क्योंकि यह यूनिक्स सिस्टम पर विकसित, परीक्षण और उपयोग किया गया था। लिनक्स कर्नेल को एक मानक C लाइब्रेरी (GNU या अन्य) के लिए सिस्टम कॉल की तरह यूनिक्स प्रदान करने के लिए डिज़ाइन किया गया था और अलग-अलग पाठ फ़ाइलों को संभालने के लिए आवश्यक जटिलता को जोड़ने और बाइनरी फ़ाइलों को मौजूदा कोड के साथ ओवरकिल और संगतता तोड़ दिया गया होगा। वह तोरवालों से निरर्थक रहा होगा।
जूलियागर

@ जेलीग्रे: यह अभी भी यादृच्छिक व्याकरणिक असंगतताओं के बजाय मौजूदा प्रथाओं के अनुरूप कुछ बनाने का एक विकल्प था। आप केवल यह कह सकते हैं कि लिनक्स की सफलता संभालने के संदर्भ में कोई विकल्प नहीं था। बहुत से लोग खिलौना शौक़ीन ओएस के कृतज्ञता से भरे निराले विकल्प बनाते हैं और वे कभी भी कहीं भी नहीं जाते हैं।
आर ..

@RI मतलब लिनक्स केवल एक कर्नेल है और इसे काम करने के लिए अनिवार्य रूप से GNU की आवश्यकता होती है (शुरुआत में टोर्वाल्ड्स लक्ष्य को ग्नू के बजाय मिनिक्स के साथ संगत किया जाना था, लेकिन इससे यहां कोई फर्क नहीं पड़ता)। नई लाइन का विकल्प लिनक्स से असंबंधित है क्योंकि यह लिनक्स लिखे जाने से काफी पहले बनाया गया था। विभिन्न लिनक्स रिलीज में बहुत अधिक या कम गंभीर विकल्प मौजूद हैं, उन्होंने लिनक्स को सफल होने से नहीं रोका। इनमें से एक कारण यह है कि इनमें से कई विकल्पों को बाद में संशोधित किया गया था।
jlliagre
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.