Apa itu carriage return, linefeed, dan form feed?

501

Apa arti dari karakter kontrol berikut:

  1. Kereta kembali

  2. Umpan baris

  3. Umpan bentuk

ashna
sumber
14
Apa arti "carriage return"? Saya tidak melihat "kereta" "kembali" di laptop saya. : s
Jean Hominal
12
@JeanHominal carriage pada dasarnya berarti kursor (atau penunjuk dalam mesin tik kuno), dan return berarti kembali ke awal baris itu.
SOFe
Saya tidak melihat ada kabel yang putus (atau panel kaca dalam hal ini) di "terminal" "window" saya, juga tidak ada "teletype" yang melekat pada / dev / tty1. Mereka semua menjadi metafora.
Piskvor meninggalkan gedung

Jawaban:

622

Pengembalian kereta berarti kembali ke awal baris saat ini tanpa bergerak ke bawah. Nama tersebut berasal dari kereta printer, karena monitor jarang ketika nama itu diciptakan. Ini umumnya lolos sebagai \r, disingkat CR , dan memiliki nilai ASCII 13atau 0x0D.

Linefeed berarti naik ke bawah ke baris berikutnya; Namun, itu telah diubah dan diganti namanya. Digunakan sebagai "baris baru", itu mengakhiri garis (biasanya bingung dengan garis memisahkan ). Ini umumnya lolos sebagai \n, disingkat LF atau NL, dan memiliki nilai ASCII 10atau 0x0A. CRLF (tetapi tidak CRNL) digunakan untuk pasangan \r\n.

Umpan formulir berarti naik ke bawah ke "halaman" berikutnya. Itu biasa digunakan sebagai pemisah halaman, tetapi sekarang juga digunakan sebagai pemisah bagian. (Ini tidak biasa digunakan dalam kode sumber untuk membagi fungsi atau kelompok fungsi yang independen secara logis.) Editor teks dapat menggunakan karakter ini ketika Anda "menyisipkan page break". Ini biasanya lolos sebagai \f, disingkat FF , dan memiliki nilai ASCII 12atau 0x0C.


Sebagai karakter kontrol, mereka dapat diinterpretasikan dengan berbagai cara.

Perbedaan yang paling umum (dan mungkin satu-satunya yang perlu dikhawatirkan) adalah garis akhir dengan CRLF pada Windows, NL pada Unix-like, dan CR pada Mac yang lebih lama (situasinya telah berubah dengan OS X menjadi seperti Unix). Perhatikan pergeseran makna dari LF ke NL, untuk karakter yang sama persis, memberikan perbedaan antara Windows dan Unix. (Windows, tentu saja, lebih baru dari Unix, jadi tidak mengadopsi pergeseran semantik ini. Saya tidak tahu sejarah Mac menggunakan CR.) Banyak editor teks dapat membaca file dalam salah satu dari ketiga format ini dan mengkonversi di antara mereka , tetapi tidak semua utilitas dapat.

Umpan formulir sedikit lebih menarik (meskipun kurang umum digunakan secara langsung), dan dengan definisi pemisah halaman yang biasa, ia hanya dapat muncul di antara baris (misalnya setelah urutan baris baru NL, CRLF, atau CR) atau di awal atau akhir file.

Roberto Caboni
sumber
10
Saya dapat mengkonfirmasi bahwa OS X menggunakan NL sebagai terminator garis, sama seperti Unix (karena OS X adalah Unix). CR digunakan di Mac OS 9 dan di bawahnya.
Rory O'Kane
1
FF char mungkin tampak aneh hari ini (bersama dengan char bell "CTRL-G") tetapi memiliki relevansi kembali ketika tampilan video jauh lebih umum dan terminal hard copy digunakan sebagai display data.
Rick Sarvas
Bukankah itu kontrol umpan \x0c?
Tjorriemorrie
2
"Aku tidak tahu sejarah Mac menggunakan CR." Itu mungkin berasal dari Apple II menggunakan CR. CR juga umum pada sistem 8-bit lainnya, seperti Commodore dan Tandy. ASCII tidak universal pada sistem ini: Commodore menggunakan PETSCII, yang memiliki LF pada 0x8d (!). Atari tidak memiliki karakter LF sama sekali. Untuk alasan apa pun, CR = 0x0d lebih atau kurang standar.
Ssswift
125

\r carriage return dan menggerakkan kursor kembali seperti jika saya akan melakukan-

printf("stackoverflow\rnine")
ninekoverflow

berarti telah menggeser kursor ke awal "stackoverflow" dan menimpa awal empat karakter sejak "sembilan" panjangnya empat karakter.

\n adalah karakter baris baru yang mengubah baris dan membawa kursor ke awal baris baru seperti-

printf("stackoverflow\nnine")
stackoverflow
nine

\f is feed form, penggunaannya telah menjadi usang tetapi digunakan untuk memberikan lekukan seperti

printf("stackoverflow\fnine")
stackoverflow
             nine

jika saya akan menulis seperti-

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great
pengguna3346547
sumber
3
Tetapi contoh ini tidak berfungsi dalam bahasa tingkat tinggi!
Sina Karvandi
@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ Saya tidak: Anda setidaknya dapat melakukan hal yang sama di Linux shell menggunakan printfutilitas dari coreutils. Atau bahkan menggunakan echo -enyang merupakan bash builtin.
Ruslan
Bagaimana cara melewatkan semua baris sebagai satu baris dalam sebuah file?
Paras Singh
8
Umpan formulir tidak digunakan untuk indentasi. Jika Anda mengirim beberapa dari mereka ke printer itu akan mengeluarkan kertas. Apa yang Anda jelaskan \fsebenarnya \v- tab vertikal, yang diberikan keduanya terlihat sama di konsol.
cprn
printf("123\f456\f789");menunjukkan /> <bold> 123456789 </bold> di konsol.
Mayur
31

Lihatlah Wikipedia :

Sistem berdasarkan ASCII atau rangkaian karakter yang kompatibel menggunakan LF (Umpan baris, '\ n', 0x0A, 10 dalam desimal) atau CR (Pengembalian kereta, '\ r', 0x0D, 13 dalam desimal) secara individu, atau CR diikuti oleh LF (CR + LF, 0x0D 0x0A). Karakter-karakter ini didasarkan pada perintah printer: Umpan garis menunjukkan bahwa satu baris kertas harus diumpan keluar dari printer, dan carriage return menunjukkan bahwa carriage printer harus kembali ke awal baris saat ini.

tanascius
sumber
25

\fdigunakan untuk page break. Anda tidak dapat melihat efek apa pun di konsol. Tetapi ketika Anda menggunakan karakter ini konstan dalam file Anda maka Anda dapat melihat perbedaannya.

Contoh lain adalah jika Anda dapat mengarahkan output ke file, maka Anda tidak perlu menulis file atau menggunakan penanganan file.

Misalnya:

Tulis kode ini di c ++

void main()    
{
    clrscr();
    cout<<"helloooooo" ;

    cout<<"\f";
    cout<<"hiiiii" ;

}

dan ketika Anda mengkompilasi ini menghasilkan exe (untuk ex. abc.exe)

maka Anda dapat mengarahkan output Anda ke file menggunakan ini:

abc > xyz.doc

kemudian buka file xyz.docAnda dapat melihat halaman yang sebenarnya istirahat antara hellooo dan hiiii ....

Balram Dixit
sumber
21

Terlepas dari informasi di atas, masih ada sejarah yang menarik dari LF (\ n) dan CR (\ r). [Penulis asli: 阮一峰 Sumber: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Sebelum komputer keluar, ada jenis teleprinter bernama Teletype Model 33. Masing-masing dapat mencetak 10 karakter kedua. Tetapi ada satu masalah dengan ini, setelah selesai mencetak setiap baris, akan butuh 0,2 detik untuk pindah ke baris berikutnya, yaitu saat mencetak 2 karakter. Jika karakter baru ditransfer selama 0,2 detik ini, maka karakter baru ini akan hilang.

Jadi para ilmuwan menemukan cara untuk mengatasi masalah ini, mereka menambahkan dua karakter akhir setelah setiap baris, satu adalah 'Carriage return', yang memberitahu printer untuk membawa print head ke kiri .; yang lainnya adalah 'Line feed', ini memberitahu printer untuk memindahkan kertas ke atas 1 baris.

Kemudian, komputer menjadi populer, kedua konsep ini digunakan pada komputer. Pada saat itu, perangkat penyimpanan itu sangat mahal, sehingga beberapa ilmuwan mengatakan bahwa menambahkan dua karakter pada akhir setiap baris itu mahal, satu sudah cukup, jadi ada beberapa argumen tentang yang mana yang akan digunakan.

Di UNIX / Mac dan Linux, '\ n' diletakkan di akhir setiap baris, di Windows, '\ r \ n' diletakkan di akhir setiap baris. Konsekuensi dari penggunaan ini adalah bahwa file dalam UNIX / Mac akan ditampilkan dalam satu baris jika dibuka di Windows. Sementara file di Windows akan memiliki satu ^ M di akhir setiap baris jika dibuka di UNIX atau Mac.

wxie
sumber
1
Dengan rilis OSX (berdasarkan BSD unix), Mac beralih ke '\ n' - akhiran baris Unix.
Jonathan Cross
"File dalam UNIX / Mac akan ditampilkan dalam satu baris jika dibuka di Windows." WRITE.EXE(alias Wordpad) dapat menampilkannya dengan baik.
thecarpy
18

Pada terminal kertas-printer tua, naik ke baris berikutnya melibatkan dua tindakan: memindahkan print head kembali ke awal rentang pemindaian horizontal (carriage return) dan memajukan gulungan kertas yang sedang dicetak (feed line).

Karena kita tidak lagi menggunakan terminal kertas-printer, tindakan itu tidak benar-benar relevan lagi, tetapi karakter yang digunakan untuk memberi sinyal mereka telah terjebak di berbagai inkarnasi.

Amber
sumber
Sebenarnya 'carriage return' tidak menggerakkan print head ke kiri, tetapi memindahkan carriage yang menahan pelat ke kanan. Dulu ada tuas panjang yang digerakkan oleh tangan kiri untuk melakukan ini. Lihat en.wikipedia.org/wiki/Typewriter
Mark Lakata
2
@MarkLakata Benar untuk mesin tik, tetapi jawaban ini adalah tentang terminal pencetakan lama. Misalnya, DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
Peter Cardona
12

Pertimbangkan printer dampak IBM 1403. CR memindahkan print head ke awal baris, tetapi TIDAK memajukan kertas. Ini memungkinkan untuk "mencetak berlebih", menempatkan banyak garis output pada satu baris. Hal-hal seperti menggarisbawahi dicapai dengan cara ini, seperti halnya cetak BOLD. LF maju kertas satu baris. Jika tidak ada CR, baris berikutnya akan mencetak sebagai langkah terhuyung karena LF tidak menggerakkan print head. FF memajukan kertas ke halaman berikutnya. Biasanya juga memindahkan print head ke awal baris pertama pada halaman baru, tetapi Anda mungkin perlu CR untuk itu. Yang pasti, sebagian besar programmer mengkodekan CRFF dan bukan CRLF pada akhir baris terakhir pada halaman karena CR tambahan yang dibuat oleh FF tidak masalah.

Dick Guertin
sumber
Ini adalah satu-satunya jawaban yang menjelaskan arti penuh carriage return.
Lee
12

Pendeknya :

Carriage_return ( \ratau 0xD): Untuk mengambil kendali di mulai dari baris yang sama .

Line_Feed ( \natau 0xA): Untuk Kendalikan di mulai dari baris berikutnya .

form_feed ( \fatau 0xC): Untuk mengambil kendali di mulai dari halaman berikutnya .

Ritik Kamboj
sumber
2
Jawaban singkat seperti ini harus didorong.
user5280911
10

Sebagai suplemen,

1, Pengembalian kereta : Ini adalah terminologi printer yang berarti mengubah lokasi cetak ke awal baris saat ini . Dalam dunia komputer, itu berarti kembali ke awal baris saat ini dalam banyak kasus tetapi jarang berdiri untuk baris baru.

2, Line feed : Ini adalah terminologi printer yang berarti memajukan kertas satu baris. Jadi Carriage return dan Line feed digunakan bersama untuk mulai mencetak di awal baris baru. Dalam dunia komputer, umumnya memiliki arti yang sama dengan baris baru.

3, Form feed : Ini terminologi printer, saya suka penjelasan di utas ini .

Jika Anda memprogram untuk printer gaya 1980-an, itu akan mengeluarkan kertas dan memulai halaman baru. Anda hampir pasti tidak pernah membutuhkannya.

http://en.wikipedia.org/wiki/Form_feed

Sudah hampir usang dan Anda dapat merujuk ke Escape sequence \ f - form feed - apa sebenarnya itu? untuk penjelasan terperinci.

Catatan, kita dapat menggunakan CR atau LF atau CRLF untuk berdiri di baris baru di beberapa platform, tetapi baris baru tidak dapat berdiri di platform lain. Lihat wiki Newline untuk detailnya.

LF: Sistem Multics, Unix dan Unix-like (Linux, OS X, FreeBSD, AIX, Xenix, dll.), BeOS, Amiga, RISC OS, dan lainnya

CR: Mesin Commodore 8-bit, Acorn BBC, ZX Spectrum, TRS-80, keluarga Apple II, Oberon, Mac OS klasik hingga versi 9, MIT Lisp Machine dan OS-9

RS: implementasi QNX pra-POSIX

0x9B: Mesin Atari 8-bit menggunakan varian ATASCII ASCII (155 dalam desimal)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS, dll.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, OS Symbian, Palm OS, Amstrad BPK, dan sebagian besar OS awal non-Unix dan non-IBM

LF + CR: Acorn BBC dan RISC OS output teks spooled.

Eugene
sumber
3

"\ n" adalah karakter linefeed. Itu berarti mengakhiri baris ini dan pergi ke baris baru untuk siapa saja yang membacanya.

vpit3833
sumber
3

Carriage return dan line feed juga merujuk pada mesin tik, yaitu dengan sedikit dorongan pada pegangan di sisi kiri media (tempat kertas bergerak), kertas akan memutar sedikit di sekitar silinder, memajukan mendokumentasikan satu baris. Jika Anda selesai mengetik satu baris, dan ingin melanjutkan ke yang berikutnya, Anda mendorong lebih keras, baik memajukan garis dan menggeser kereta sampai ke kanan, kemudian melanjutkan mengetik dari kiri ke kanan lagi saat kereta berjalan dengan masing-masing keystroke . Tidak perlu dikatakan, bungkus kata adalah pengaturan default untuk semua pemrosesan kata di era ini. P: D

Kata Kata Terakhir
sumber
2

Itu adalah karakter non-cetak, berkaitan dengan konsep "baris baru". \ n adalah linefeed. adalah carriage return. Pada platform yang berbeda, mereka memiliki arti yang berbeda, relatif terhadap baris baru yang valid. Di windows, baris baru adalah \ r \ n. Di linux, \ n. Di mac, \ r.

Dalam praktiknya, Anda meletakkannya di string apa pun, dan itu akan berpengaruh pada hasil cetak string.

Palantir
sumber