O ile mi wiadomo, każdy system operacyjny ma inny sposób oznaczania znaku końca linii (EOL). Komercyjne systemy operacyjne używają powrotu karetki dla EOL (powrót karetki i przesunięcie wiersza w systemie Windows, powrót karetki tylko w systemie Mac). Z drugiej strony Linux używa po prostu linii do EOL.
Dlaczego Linux nie używa znaku powrotu karetki dla EOL (i zamiast tego tylko przesuwania wiersza)?
Odpowiedzi:
System Windows używa, CRLFponieważ odziedziczył go po MS-DOS.
MS-DOS używa, CRLFponieważ został zainspirowany przez CP / M, który był już używany CRLF.
Wykorzystano CP / M i wiele systemów operacyjnych z lat osiemdziesiątych i wcześniejszych, CRLFponieważ był to sposób na zakończenie linii wydrukowanej na teletypie (powrót na początek linii i przejście do następnej linii, tak jak zwykłe maszyny do pisania). Uprościło to drukowanie pliku, ponieważ wstępne przetwarzanie było mniejsze lub nie było wymagane. Istniały również wymagania mechaniczne, które uniemożliwiały użycie jednego znaku. Może zająć trochę czasu, aby umożliwić powrót karetki i obrót płyty dociskowej.
GNU / Linux używa, LFponieważ jest to klon uniksowy . 1
Unix używał jednego znaku, LFod samego początku, aby zaoszczędzić miejsce i ustandaryzować do kanonicznego końca linii, użycie dwóch znaków było nieefektywne i dwuznaczne. Ten wybór został odziedziczony po Multics, który używał go już w 1964 roku. Pamięć, pamięć, moc procesora i przepustowość były bardzo rzadkie, więc warto było zaoszczędzić jeden bajt na linię. Gdy plik został wydrukowany, sterownik konwertuje przesunięcie wiersza (nowa linia) na znaki sterujące wymagane przez urządzenie docelowe.
LFbył preferowany, CRponieważ ten ostatni nadal miał określone zastosowanie. Przesunięcie drukowanego znaku na początek tego samego wiersza pozwoliło na zastąpienie już wpisanych znaków.
Jabłko początkowo postanowił również użyć pojedynczego znaku, ale z jakiegoś powodu wybrał drugą: CR. Kiedy przeszedł na interfejs BSD, przeniósł się do LF.
Te wybory nie mają nic wspólnego z faktem, że system operacyjny jest komercyjny czy nie.
1 To jest odpowiedź na twoje pytanie.
źródło
\n
, niezależnie od określonego urządzenia wyjściowego.Artykuł w Wikipedii na temat „Newline” śledzi wybór NL jako terminatora (lub separatora) linii do Multics w 1964 roku; niestety artykuł zawiera kilka cytatów do źródeł, ale nie ma powodu, by wątpić, czy to prawda. Istnieją dwie oczywiste zalety tego wyboru w porównaniu z CR-LF: oszczędność miejsca i niezależność urządzenia.
Główna alternatywa, CR-LF, pochodzi od kodów sterujących używanych do fizycznego przesunięcia karetki papieru na maszynie teletechnicznej, gdzie CR przywróciłoby karetkę do pozycji wyjściowej, a LF obrócił rolkę papieru, aby przesunąć pozycję drukowania w dół o jeden linia. Dwa znaki kontrolne pojawiają się w kodzie ITA2, który pochodzi z 1924 r. I który najwyraźniej jest nadal używany (patrz Wikipedia); najwyraźniej ITA2 wzięło je z wariantu kodu Baudot Murraya z 1901 r.
Dla młodszych czytelników warto zauważyć, że w tradycji komputerów mainframe nie było znaku nowej linii; raczej plik był sekwencją zapisów, które miały albo stałą długość (często 80 znaków, w oparciu o karty perforowane), albo zmienną długość; zapisy o zmiennej długości były zwykle przechowywane z liczbą znaków na początku każdego zapisu. Jeśli masz plik mainframe składający się z sekwencji rekordów o zmiennej długości, z których każda zawiera dowolną zawartość binarną, konwersja tego pliku bezstratnie do pliku w stylu UNIX może być trudną konwersją.
Linux oczywiście był tylko ponowną implementacją Uniksa, a Unix podjął wiele decyzji projektowych od Multics, więc wygląda na to, że kluczowa decyzja została podjęta w 1964 roku.
źródło
Inne odpowiedzi prześledziły łańcuch spadkowy z lat 60. XX wieku i rodzaje teletekstów. Ale jest jeden aspekt, którego nie omówili.
W czasach teletypów były chwile, w których pożądane było zrobienie czegoś zwanego overstrike. Overstrike bywało czasem używane do ukrywania hasła, ponieważ usunięcie hasła było po prostu niewykonalne. Innym razem wykonywano nadpisywanie, aby uzyskać symbol, którego nie ma w czcionce. Na przykład litera O i ukośnik tworzą nowy symbol.
Overstriking został osiągnięty poprzez wprowadzenie powrotu karetki bez linii posuwu, czasem użyto mocnego backspace. Z tego powodu ludzie uniksowi zdecydowali się nie zwracać karetki jako separatora linii i zamiast tego zdecydowali się na podawanie linii. Sprawdziło się to również w przypadku czytania tekstów wyprodukowanych przy użyciu konwencji CRLF. CR zostaje połknięty, a LF staje się separatorem.
źródło
Chociaż możesz przetłumaczyć pytanie historyczne na pytanie dotyczące języka C, powód, dla którego Linux i wszystkie systemy zgodne z POSIX lub POSIX-owe muszą używać
LF
(lub przynajmniej cokolwiek to'\n'
jest znak C ) jako nowej linii, jest konsekwencją przecięcia wymagań C i POSIX. Podczas gdy C umożliwia różnicowanie „plików tekstowych” i „plików binarnych” (w rzeczywistości pliki tekstowe mogą być oparte na rekordach składających się z sekwencji rekordów liniowych, oprócz mniej egzotycznych rzeczy, takich jak'\n'
tłumaczenie na / zCR
/LF
jak na DOS / Windows ), POSIX nakazuje, aby tryb tekstowy i binarny zachowywał się tak samo. Jest to w dużej mierze powód, dla którego lubią narzędzia wiersza poleceńcat
są potężne / przydatne; byłoby ich znacznie mniej, gdyby pracowali tylko z plikiem binarnym lub tylko z tekstem, ale nie z oboma.źródło