Sejauh yang saya tahu, setiap sistem operasi memiliki cara yang berbeda untuk menandai karakter end of line (EOL). Sistem operasi komersial menggunakan carriage return untuk EOL (carriage return dan line feed pada Windows, carriage return hanya pada Mac). Linux, di sisi lain, hanya menggunakan umpan baris untuk EOL.
Mengapa Linux tidak menggunakan carriage return untuk EOL (dan hanya line feed saja)?
Jawaban:
Penggunaan Windows CRLFkarena mewarisinya dari MS-DOS.
Penggunaan MS-DOS CRLFkarena terinspirasi oleh CP / M yang sudah menggunakan CRLF.
CP / M dan banyak sistem operasi dari tahun delapan puluhan dan sebelumnya digunakan CRLFkarena itu adalah cara untuk mengakhiri garis yang dicetak pada teletype (kembali ke awal baris dan lompat ke baris berikutnya, sama seperti mesin tik biasa). Ini disederhanakan mencetak file karena ada lebih sedikit atau tidak diperlukan pra-pemrosesan. Ada juga persyaratan mekanis yang mencegah satu karakter untuk dapat digunakan. Beberapa waktu mungkin diperlukan untuk memungkinkan kereta untuk kembali dan pelat untuk memutar.
Gnu / Linux menggunakan LFkarena itu adalah klon Unix . 1
Unix menggunakan karakter tunggal LF,, dari awal untuk menghemat ruang dan membakukan ke end-of-line kanonik, menggunakan dua karakter tidak efisien dan ambigu. Pilihan ini diwarisi dari Multics yang menggunakannya sedini 1964. Memori, penyimpanan, daya CPU dan bandwidth sangat jarang sehingga menghemat satu byte per baris patut dilakukan. Ketika sebuah file dicetak, driver itu mengonversi umpan baris (baris baru) ke karakter kontrol yang diperlukan oleh perangkat target.
LFlebih disukai CRkarena yang terakhir masih memiliki penggunaan khusus. Dengan memposisikan ulang karakter yang telah dicetak ke awal baris yang sama, itu memungkinkan untuk melakukan overstrike karakter yang sudah diketik.
Apel awalnya memutuskan untuk juga menggunakan satu karakter tapi untuk beberapa alasan memilih yang satu: CR. Ketika beralih ke antarmuka BSD, ia pindah ke LF.
Pilihan-pilihan ini tidak ada hubungannya dengan fakta bahwa suatu OS bersifat komersial atau tidak.
1 Ini adalah jawaban untuk pertanyaan Anda.
sumber
\n
, terlepas dari beberapa perangkat keluaran tertentu.Artikel wikipedia pada "Newline" melacak pilihan NL sebagai terminator garis (atau pemisah) ke Multics pada tahun 1964; sayangnya artikel ini memiliki beberapa kutipan untuk sumber tetapi tidak ada alasan untuk meragukan ini benar. Ada dua manfaat yang jelas untuk pilihan ini dibandingkan CR-LF: penghematan ruang, dan independensi perangkat.
Alternatif utama, CR-LF, berasal dari kode kontrol yang digunakan untuk memindahkan kereta kertas secara fisik pada mesin teletype, di mana CR akan mengembalikan kereta ke posisi asal, dan LF akan memutar rol kertas untuk menggeser posisi cetak ke bawah. baris. Dua karakter kontrol muncul dalam kode ITA2 yang tanggal kembali ke 1924 dan yang tampaknya masih digunakan (lihat Wikipedia); rupanya ITA2 membawa mereka dari varian Murray dari kode Baudot yang berasal dari tahun 1901.
Untuk pembaca yang lebih muda perlu dicatat bahwa dalam tradisi mainframe, tidak ada karakter baris baru; bukan file adalah urutan catatan yang entah panjang tetap (sering 80 karakter, berdasarkan kartu berlubang) atau panjang variabel; catatan panjang variabel biasanya disimpan dengan jumlah karakter di awal setiap catatan. Jika Anda memiliki file mainframe yang terdiri dari urutan catatan panjang variabel yang masing-masing berisi konten biner sewenang-wenang, mengonversi ini tanpa kehilangan ke file gaya UNIX bisa menjadi konversi yang rumit.
Linux, tentu saja, hanyalah implementasi ulang Unix, dan Unix mengambil banyak keputusan desainnya dari Multics, jadi sepertinya keputusan kunci dibuat pada tahun 1964.
sumber
Jawaban lain telah menelusuri rantai pewarisan kembali ke tahun 1960-an, dan teletype. Tapi inilah satu aspek yang tidak mereka bahas.
Pada zaman teletype, ada saat-saat ketika diinginkan untuk melakukan sesuatu yang disebut overstriking. Overstriking kadang-kadang digunakan untuk mengaburkan kata sandi, karena menghapus kata sandi itu tidak bisa dilakukan. Di lain waktu, overstriking dilakukan untuk mendapatkan simbol yang tidak ada dalam font. Misalnya, huruf O dan garis miring menghasilkan simbol baru.
Overstriking dicapai dengan memasukkan carriage return tanpa umpan baris, kadang-kadang backspace juga digunakan. Untuk alasan ini, orang-orang unix memutuskan menentang carriage return sebagai pemisah garis, dan memilih untuk umpan baris sebagai gantinya. Ini juga bekerja dengan baik untuk membaca teks yang diproduksi menggunakan konvensi CRLF. CR ditelan, dan LF menjadi pemisah.
sumber
Meskipun Anda dapat menerjemahkan pertanyaan historis menjadi pertanyaan tentang bahasa C, alasan mengapa Linux dan semua sistem POSIX-conforming atau POSIX-ish harus menggunakan
LF
(atau setidaknya apa pun'\n'
karakter C ) karena baris baru merupakan konsekuensi dari persimpangan persyaratan C dan POSIX. Sementara C memungkinkan "file teks" dan "file biner" berbeda (pada kenyataannya file teks dapat berbasis catatan yang terdiri dari urutan catatan baris, selain hal-hal yang kurang eksotis seperti'\n'
diterjemahkan ke / dariCR
/LF
seperti pada DOS / Windows ), POSIX mengamanatkan bahwa mode teks dan biner berperilaku sama. Ini sebagian besar alasan alat baris perintah sukacat
kuat / bermanfaat; mereka akan jauh lebih sedikit jika mereka hanya bekerja dengan biner, atau hanya dengan teks, tetapi tidak keduanya.sumber