Linux neden LF'yi yeni satır karakteri olarak kullanıyor?


87

Bildiğim kadarıyla, her işletim sisteminin satır sonu (EOL) karakterini işaretlemede farklı bir yolu vardır. Ticari işletim sistemleri EOL için satır başı kullanır (satır başı ve Windows'ta satır başı, yalnızca Mac'te satır başı). Öte yandan, Linux sadece EOL için satır beslemesi kullanır.

Linux neden EOL için satır başı kullanmıyor (ve bunun yerine yalnızca satır besleme)?


77
Mac'ler CR'yi yalnızca OS X'ten önce kullanmadı ... şimdi * nix stil LF kullandıklarına inanıyorum.
B Katmanı

33
Çok sayıda ticari Unixy OS olduğunu düşünüyorum: s de.
ilkkachu

20
Wikipedia'da açıklandı . Temelde Son 60'lardaki Multics (Linux'a ilham veren Unix'ten esinlenen), metin kodlama kodunun teletype cihazların sınırlamaları ile korunmasını engellemek için bir miktar soyutlama seviyesi ekledi; Tabii ki 50 yıl sonra hissediyorum).
Stéphane Chazelas

74
İkinci paragraf geçerli bir sorudur, ancak ilk paragraf o kadar boğuluyor ki aşırı basitleştirmeler ve düpedüz hatalarla doludur ki, cevaplayıcılar soruyu çözmeden önce bir sürü iffy ve hatalı mekanı düzeltmek zorunda kalır.
JdeBP

21
Ne? Linux, UNIX adı verilen ticari bir işletim sistemi standardının ücretsiz bir yaklaşımıdır. UNIX uyumlu sistemler o zamanlar çok paraya mal oluyor ve bugün hala yapıyorlar.
errantlinguist

Yanıtlar:


334

Windows CRLF, MS-DOS'dan devraldığı için kullanır .

MS-DOS CRLF, zaten kullanan CP / M'den ilham aldığından kullanır CRLF.

CP / M ve seksenli ve daha önceki birçok işletim sistemi CRLFteletipe basılmış bir çizgiyi sonlandırmanın yoluydu çünkü (hattın başına dönün ve sıradaki daktilolar gibi bir sonraki satıra geçin). Bu işlem, daha az ön işleme gerek duyulmadığı ya da hiç olmadığı için bir dosyayı yazdırmayı basitleştirdi. Tek bir karakterin kullanılabilmesini engelleyen mekanik gereksinimler de vardı. Taşıyıcının dönmesi ve merdanenin dönmesi için biraz zaman gerekebilir .

Gnu / Linux kullanır LFçünkü bir Unix klonudur . 1

Unix, tek bir karakter kullandı LF, en baştan yerden tasarruf etmek ve kanonik bir satır sonuna standart hale getirmek için iki karakter kullanmak verimsiz ve belirsizdi. Bu seçenek 1964 gibi erken bir zamanda kullanılan Multics'ten devralındı. Bellek, depolama, CPU gücü ve bant genişliği çok seyrekti, bu yüzden satır başına bir bayt tasarruf etmeye değiyordu. Bir dosya yazdırıldığında, sürücü satır beslemesini (yeni satır) hedef cihazın gerektirdiği kontrol karakterlerine dönüştürüyordu.

LFCRikincisi hala belirli bir kullanıma sahip olduğu için tercih edildi . Yazdırılan karakteri aynı satırın başına getirerek, önceden yazılmış karakterleri aşmaya izin verdi.

Elma başlangıçta da tek bir karakterin kullanmaya karar ama nedense başka bir aldı: CR. Bir BSD arayüzüne geçtiğinde, taşındı LF.

Bu tercihlerin bir işletim sisteminin ticari olup olmadığı ile ilgisi yoktur.

1 Bu sorunuzun cevabı.


20
Multics, satır beslemesini ve satır beslemesini birlikte, tek karakterli bir temsil gerekliyse, tek bir karakterde göstermenin bir yolu olarak tanımlayan çağdaş ISO / IEC 646 ile uyumlu olarak Satır Besleme'yi kullandı.
JdeBP

10
Tek bir karakter seçmenin asıl sebebinin yer kazanmaktan şüpheliyim. Asıl sebep, çıkış cihazından (terminal vb.) Bağımsız olan tek satırlık bir karakter tanımlamaktı . Terminal (ya da benzer) sürücüsü daha sonra yeni hattı, tipik olarak CR LF gibi uygun kontrol karakter sırasına dönüştürmeye özen gösterir. Bu, dizelerle programlama yaparken hoş bir soyutlamaya izin verir: newline, \nbelirli bir çıktı aygıtından bağımsız olarak, tekli olarak sunulur .
Johan Myréen

14
Bununla birlikte, Saltzer ve Ossanna (1970 Yılına kağıt Multics de uzak terminal karakter akış işleme ) aygıt bağımsızlığı oldukça açıktır olduğu sebep.
JdeBP

3
@JdeBP Bu yazıda , uzak uçbirimden ve uzak uçbirimden geçen karakter akışının kanonik formuna indirgenme belirtilmiştir . Bir kanonik forma küçültmek, yerden tasarruf etmenin de bir yoluydu. Farklı olarak ifade edilirse, iki karakter kullanmak verimsiz ve belirsiz bir alan kaybıydı.
jlliagre

46
Ve teletypes bunu elektriksiz daktilolardan aldı. CR-LF, kolu sola doğru bastırdığınızda yaptığınız mekanik hareketi açıklar. Baskı plakasını (rulo) tamamen sağa geri (taşıyıcı tuşunu solda birinci konuma koyar) tutan "taşıyıcıyı" geri döndürün ve sonraki yazılabilir çizgiye geçmek için baskı plakasını bir satır yüksekliği döndürün. Evet, kuşkusuz burada yaşımı gösteriyorum.
cdkMoose

17

"Newline" hakkındaki wikipedia makalesi, 1964'te NL'nin bir satır sonlandırıcı (veya ayırıcı) olarak Multics'e göre seçildiğini izler; Maalesef, makalede kaynaklara atıf yapılan çok az alıntı var ama bunun doğru olduğundan şüphelenmek için bir neden yok. CR-LF'ye göre bu seçimin iki belirgin yararı var: Yer tasarrufu ve cihaz bağımsızlığı.

Ana alternatif olan CR-LF, kağıt taşıyıcıyı bir teletip makinede fiziksel olarak hareket ettirmek için kullanılan kontrol kodlarından kaynaklanır; burada CR, taşıyıcıyı başlangıç ​​konumuna döndürür ve LF, baskı konumunu aşağı doğru hareket ettirmek için kağıt silindirini döndürür hat. İki kontrol karakteri, 1924 yılına dayanan ve görünüşe göre hala kullanımda olan ITA2 kodunda görünür (bkz. Wikipedia); Görünüşe göre ITA2 onları 1901 yılına kadar uzanan Baudot kodunun Murray varyantından aldı.

Genç okuyucular için, ana bilgisayar geleneğinde, yeni bir karakter olmadığına dikkat etmek gerekir; bunun yerine bir dosya sabit uzunlukta (genellikle delikli kartlara göre 80 karakter) veya değişken uzunlukta bir kayıt dizisiydi; değişken uzunluktaki kayıtlar tipik olarak, her kaydın başlangıcında bir karakter sayımı ile kaydedilmiştir. Her biri isteğe bağlı ikili içerik içeren değişken uzunluklu bir kayıt dizisinden oluşan bir ana dosya varsa, bunu kayıpsız bir şekilde UNIX stili bir dosyaya dönüştürmek zor bir dönüşüm olabilir.

Linux, tabii ki, sadece Unix'in bir yeniden uygulamasıydı ve Unix tasarım kararlarının çoğunu Multics'ten aldı, bu yüzden 1964'te verilen ana karar gibi görünüyor.


12

Diğer cevaplar miras zincirini 1960'lara ve teletiplere kadar uzandı. Ama işte onların kapsamadıkları bir yön.

Teletiplerin yapıldığı günlerde, overtriking denilen bir şey yapmanın istendiği zamanlar oldu. Aşırı gizleme, bazen bir şifreyi gizlemek için kullanılıyordu, çünkü şifreyi silmek pek mümkün değildi. Diğer zamanlarda, yazı tipinde olmayan bir sembol almak için fazla çizme yapıldı. Örneğin, O harfi ve eğik çizgi, yeni bir sembol üretir.
Aşırı gerileme, satır beslemesi olmayan bir satır başı getirilerek elde edildi, ancak bazen geri alma kullanıldı. Bu nedenle, unix insanlar taşıma işlemine satır ayırıcı olarak dönmeye karar verdiler ve bunun yerine satır beslemesini seçtiler. Bu, CRLF sözleşmesi kullanılarak üretilen metinleri okumak için de iyi sonuç verdi. CR yutulur ve LF ayırıcı olur.


Bu doğru hafıza için teşekkür ederim. Geri Al ve Satır İadesi (yalnızca), yazıcıda koyu veya altı çizili karakterler üretmek için de kullanılmıştır. Kökenlere geri dönmek için, bu iki komut, 1930'da “taşıma” nın “en soldaki konumuna” dönmesi ya da “yeni çizginin” yardımıyla yeni bir çizgiyi başlatmasına izin vermek için zaten mevcuttu. yapılan anahtar silindiri bir adım döndürün. Bakınız: en.wikipedia.org/wiki/IBM_Electric_typewriter . Yani "CR" + "LF" bilgisayar tarihinden önce çıkıyor.
dan

Bazı teletiplerin, bir sonraki yazdırma karakterine ulaşılmadan önce tam olarak dönmesi için taşıyıcı zamanın verilmesi için bir CR'nin baskı yapmayan bir karakterin takip etmesini gerektirdiği ve CR sonrası bir LF göndermesi gerektiği için kayda değer olabilir. hiçbir şeye mal olmadı ve üst baskı yapmanın tek yolu CR’di.
supercat

"Teletypes günleri" bilgisayar çağından önce başlar. 1960'larda birçok bilgisayarda operatör için bir konsol teletipi vardı ve ASCII daha çok karakter seti olarak kullanıldı.
Walter Mitty

7

C dili, Linux ve tüm POSIX uyumlu veya POSIX imsi sistemler bu nedenle hakkında bir soru tarihsel soruyu tercüme olabilir iken gerekir kullanmak LF(veya C olursa olsun en azından '\n'karakteridir) yeni satır olarak kesiştiği bir sonucudur C ve POSIX gereklilikleri C, "metin dosyaları" ve "ikili dosyalar" ın farklılık göstermesine izin verirken (aslında metin dosyaları DOS / Windows'ta '\n'/ dan CR/ LFlike / like'a çevrilmiş gibi daha az egzotik şeylerin yanı sıra, bir dizi satır kayıtlarından oluşan kayıt tabanlı olabilir ), POSIX, metin ve ikili modun aynı şekilde davranmasını zorunlu kılar. Bu büyük ölçüde komut satırı araçları gibi nedenicatgüçlü / faydalı; çok daha az olurlardı, eğer sadece ikilikle ya da sadece metinle çalıştılarsa, ama ikisi birden olmazsa.


13
Bu seçim POSIX’i yıllar önce öneriyor. Jlliagre'nin cevabında da belirtildiği gibi, Unix'in başlangıcına, Multics'ten kopyaladı.
Barmar

4
Linux'taki seçim POSIX'i yıllarca sürdürmez . Tabii ki POSIX zaten var olan uygulamanın ne olduğunu kodladı, çünkü bu onun varoluş nedeni idi.
R. ..

Linux söz konusu olduğunda, ilk başta yapmak için gerçek bir seçenek yoktu. Linux tarafından kullanılan Gnu standart kütüphanesi POSIX'in çağdaşı ve Unix sistemlerinde geliştirildiği, test edildiği ve kullanıldığı için bariz uyumluluk nedenlerinden dolayı satır beslemesi kullanıyordu. Linux çekirdeği, Unix benzeri sistem çağrılarını standart bir C kütüphanesine (GNU veya diğer) çağırmak için tasarlanmıştır ve farklı metin dosyalarını ve ikili dosyaları ele almak için gerekli olan karmaşıklığı eklemek, fazladan kullanılabilir ve mevcut kodla uyumluluğu bozardı. Torvalds’tan saçma sapan bir şey olurdu.
jlliagre

@jlliagre: Hala rastgele elverişsiz uyumsuzluklardan ziyade mevcut uygulamalarla uyumlu bir şeyler yapmak bir seçimdi. Bunun sadece Linux’un başarısını kabul etmek bağlamında bir seçenek olmadığını söyleyebilirsiniz. Pek çok insan, oyuncak hobisi işletim sistemindeki OS'leri huysuzca tuhaf seçeneklerle doludur ve asla bir yere gitmezler.
R ..

@RI, Linux'un sadece bir çekirdek olduğu ve aslında GNU'nun çalışmasını gerektirdiği anlamına gelir (başlangıçta Torvalds hedefi, gnu yerine minix ile uyumlu olmaktı, ancak bu fark yaratmaz). Newline seçimi Linux ile ilgisiz çünkü Linux yazılmadan çok önce yapıldı. Çeşitli Linux sürümlerinde daha fazla ya da daha az çirkin çirkin seçenek vardı, Linux'un başarılı olmasını engellemediler. Bu seçeneklerin çoğunun daha sonra tekrar ziyaret edilmesinin olası nedenlerinden biri.
jlliagre
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.