Trở về vận chuyển, thức ăn và hình thức ăn là gì?


500

Ý nghĩa của các ký tự điều khiển sau là gì:

  1. Vận chuyển trở lại

  2. Nguồn cấp dữ liệu

  3. Thức ăn dạng


14
"Vận chuyển trở lại" có nghĩa là gì? Tôi không thấy bất kỳ "cỗ xe" "trở về" nào trên máy tính xách tay của mình. : s
Jean Hominal

12
@JeanHominal cỗ xe về cơ bản có nghĩa là con trỏ (hoặc con trỏ trong máy đánh chữ cổ) và return có nghĩa là quay trở lại đầu dòng đó.
SOFe

Tôi không thấy bất kỳ dây nào bị chấm dứt (hoặc bất kỳ tấm kính nào cho vấn đề đó) trong "cửa sổ" "cửa sổ" của tôi, cũng không có "teletype" được gắn vào / dev / tty1. Tất cả đều trở thành ẩn dụ.
Piskvor rời tòa nhà

Câu trả lời:


621

Vận chuyển trở lại có nghĩa là trở về đầu của dòng hiện tại mà không tiến xuống. Tên đến từ cỗ máy của máy in, vì màn hình rất hiếm khi tên được đặt. Điều này thường được thoát như \rCR viết tắt và có giá trị ASCII 13hoặc 0x0D.

Linefeed có nghĩa là tiến xuống dòng tiếp theo; tuy nhiên, nó đã được tái sử dụng và đổi tên. Được sử dụng như "dòng mới", nó chấm dứt các dòng (thường bị nhầm lẫn với các dòng tách biệt ). Điều này thường được thoát như \n, viết tắt là LF hoặc NL và có giá trị ASCII 10hoặc 0x0A. CRLF (nhưng không phải CRNL) được sử dụng cho cặp \r\n.

Nguồn cấp dữ liệu mẫu có nghĩa là tiến xuống "trang" tiếp theo. Nó thường được sử dụng làm trình phân tách trang, nhưng bây giờ cũng được sử dụng làm trình phân tách phần. (Nó được sử dụng không phổ biến trong mã nguồn để phân chia các hàm hoặc nhóm chức năng độc lập logic.) Trình chỉnh sửa văn bản có thể sử dụng ký tự này khi bạn "chèn ngắt trang". Điều này thường được thoát như \f, viết tắt FF và có giá trị ASCII 12hoặc 0x0C.


Là nhân vật điều khiển, chúng có thể được diễn giải theo nhiều cách khác nhau.

Sự khác biệt phổ biến nhất (và có lẽ là điều duy nhất đáng lo ngại) là các dòng kết thúc bằng CRLF trên Windows, NL trên Unix và CR trên Mac cũ (tình hình đã thay đổi với OS X giống như Unix). Lưu ý sự thay đổi về ý nghĩa từ LF sang NL, đối với cùng một ký tự, mang lại sự khác biệt giữa Windows và Unix. (Tất nhiên, Windows mới hơn Unix, vì vậy nó không áp dụng sự thay đổi ngữ nghĩa này. Tôi không biết lịch sử của máy Mac bằng CR.) Nhiều trình soạn thảo văn bản có thể đọc các tệp ở bất kỳ định dạng nào trong ba định dạng này và chuyển đổi giữa chúng. , nhưng không phải tất cả các tiện ích có thể.

Nguồn cấp dữ liệu biểu mẫu thú vị hơn một chút (mặc dù ít được sử dụng trực tiếp hơn) và với định nghĩa thông thường của trình phân tách trang, nó chỉ có thể nằm giữa các dòng (ví dụ: sau chuỗi dòng mới của NL, CRLF hoặc CR) hoặc khi bắt đầu hoặc cuối tập tin.


10
Tôi có thể xác nhận rằng OS X sử dụng NL làm đầu cuối dòng, giống như Unix (vì OS X Unix). CR đã được sử dụng trong Mac OS 9 trở xuống.
Rory O'Kane

1
Char char FF ngày nay có vẻ lạ (cùng với char bell "CTRL-G") nhưng nó có liên quan trở lại hơn khi màn hình video ít phổ biến hơn và các thiết bị đầu cuối sao chép cứng được sử dụng làm màn hình dữ liệu.
Rick Sarvas

Đó không phải là kiểm soát thức ăn \x0c?
Tjorriemorrie

2
"Tôi không biết lịch sử của máy Mac sử dụng CR." Điều đó có lẽ đến từ Apple II bằng CR. CR cũng phổ biến trên các hệ thống 8 bit khác, như Commodore và Tandy. ASCII không phổ biến trên các hệ thống này: Commodore đã sử dụng PETSCII, có LF ở mức 0x8d (!). Atari không có nhân vật nào cả. Vì lý do nào, CR = 0x0d là tiêu chuẩn nhiều hơn hoặc ít hơn.
Ssswift

125

\r là vận chuyển trở lại và di chuyển con trỏ trở lại như thể tôi sẽ làm-

printf("stackoverflow\rnine")
ninekoverflow

có nghĩa là nó đã dịch chuyển con trỏ đến đầu "stackoverflow" và ghi đè lên bốn ký tự bắt đầu vì "chín" dài bốn ký tự.

\n là ký tự dòng mới thay đổi dòng và đưa con trỏ đến đầu dòng mới như-

printf("stackoverflow\nnine")
stackoverflow
nine

\f là dạng thức ăn, việc sử dụng của nó đã trở nên lỗi thời nhưng nó được sử dụng để tạo ra vết lõm như

printf("stackoverflow\fnine")
stackoverflow
             nine

nếu tôi sẽ viết như-

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great

3
Nhưng ví dụ này không hoạt động trong các ngôn ngữ cấp cao!
Sina Karvandi

@ I Kᗩᖇ ᐯᗩᑎᗪ Tôi có: ít nhất bạn có thể làm tương tự trong shell Linux bằng cách sử dụng printftiện ích từ coreutils. Hoặc thậm chí sử dụng echo -enđó là một bash dựng sẵn.
Ruslan

Làm thế nào để vượt qua tất cả các dòng dưới dạng một dòng trong một tệp?
Paras Singh

8
Thức ăn mẫu không được sử dụng để thụt lề. Nếu bạn gửi một vài trong số chúng cho một máy in, nó sẽ nhổ giấy ra. Những gì bạn đã mô tả \flà thực sự \v- một tab dọc, được cho là cả hai trông giống nhau trong bảng điều khiển.
cprn

printf("123\f456\f789");hiển thị /> <bold> 123456789 </ bold> trên bảng điều khiển.
Mayur

31

Hãy xem Wikipedia :

Các hệ thống dựa trên ASCII hoặc một bộ ký tự tương thích sử dụng riêng lẻ (Nguồn cấp dữ liệu, '\ n', 0x0A, 10 theo số thập phân) hoặc CR (Trả về vận chuyển, '\ r', 0x0D, 13 theo số thập phân) hoặc CR theo sau LF (CR + LF, 0x0D 0x0A). Các ký tự này dựa trên các lệnh của máy in: Nguồn cấp dữ liệu chỉ ra rằng một dòng giấy sẽ được nạp ra khỏi máy in và việc trả lại vận chuyển chỉ ra rằng việc vận chuyển máy in sẽ trở về đầu dòng hiện tại.


25

\fđược sử dụng để ngắt trang. Bạn không thể thấy bất kỳ hiệu ứng trong giao diện điều khiển. Nhưng khi bạn sử dụng hằng ký tự này trong tệp của mình thì bạn có thể thấy sự khác biệt.

Ví dụ khác là nếu bạn có thể chuyển hướng đầu ra của mình sang một tệp thì bạn không phải viết tệp hoặc sử dụng xử lý tệp.

Ví dụ:

Viết mã này trong c ++

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

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

}

và khi bạn biên dịch nó sẽ tạo ra một exe (ví dụ như ex. abc.exe )

sau đó bạn có thể chuyển hướng đầu ra của bạn đến một tệp bằng cách này:

abc > xyz.doc

sau đó mở tệp xyz.docbạn có thể thấy ngắt trang thực tế giữa hellooo và hiiii ....


21

Ngoài những thông tin trên, vẫn còn một lịch sử thú vị về LF (\ n) và CR (\ r). [Tác giả gốc: Nguồn: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Trước khi máy tính xuất hiện, có một loại teleprinter gọi là Teletype Model 33. Nó có thể in mỗi ký tự 10 ký tự thứ hai. Nhưng có một vấn đề với điều này, sau khi in xong mỗi dòng, sẽ mất 0,2 giây để chuyển sang dòng tiếp theo, đó là thời gian in 2 ký tự. Nếu một nhân vật mới được chuyển trong 0,2 giây này, thì nhân vật mới này sẽ bị mất.

Vì vậy, các nhà khoa học đã tìm ra cách giải quyết vấn đề này, họ thêm hai ký tự kết thúc sau mỗi dòng, một là 'Vận chuyển trở lại', nghĩa là bảo máy in đưa đầu in sang trái.; một cái khác là 'Line feed', nó báo cho máy in di chuyển giấy lên 1 dòng.

Sau này, máy tính trở nên phổ biến, hai khái niệm này được sử dụng trên máy tính. Vào thời điểm đó, thiết bị lưu trữ rất đắt tiền, vì vậy một số nhà khoa học cho rằng rất tốn kém khi thêm hai ký tự ở cuối mỗi dòng, một là đủ, vì vậy có một số tranh luận về việc nên sử dụng cái nào.

Trong UNIX / Mac và Linux, '\ n' được đặt ở cuối mỗi dòng, trong Windows, '\ r \ n' được đặt ở cuối mỗi dòng. Hậu quả của việc sử dụng này là các tệp trong UNIX / Mac sẽ được hiển thị trong một dòng nếu được mở trong Windows. Trong khi tệp trong Windows sẽ có một ^ M ở cuối mỗi dòng nếu được mở trong UNIX hoặc Mac.


1
Với việc phát hành OSX (dựa trên BSD unix), Mac đã chuyển sang '\ n' - kết thúc dòng Unix.
Jonathan Cross

"Các tệp trong UNIX / Mac sẽ được hiển thị trong một dòng nếu được mở trong Windows." WRITE.EXE(còn gọi là Wordpad) có thể hiển thị chúng tốt.
thecarpy

18

Trên các thiết bị đầu cuối máy in giấy cũ, tiến tới dòng tiếp theo bao gồm hai hành động: di chuyển đầu in trở lại đầu phạm vi quét ngang (quay trở lại vận chuyển) và tiến lên cuộn giấy được in trên (nạp giấy).

Vì chúng tôi không còn sử dụng thiết bị đầu cuối máy in giấy nữa, những hành động đó không thực sự phù hợp nữa, nhưng các ký tự được sử dụng để báo hiệu chúng đã bị mắc kẹt trong các hóa thân khác nhau.


Trên thực tế, 'trở về vận chuyển' không di chuyển đầu in sang trái, mà di chuyển cỗ xe giữ trục lăn sang phải. Đã từng có một đòn bẩy dài được kích hoạt bằng tay trái để làm việc này. Xem en.wikipedia.org/wiki/Typewriter
Mark Lakata

2
@MarkLakata Đúng cho máy chữ, nhưng câu trả lời này là về các thiết bị in cũ. Ví dụ: DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
Peter Cardona

12

Hãy xem xét một máy in tác động IBM 1403. CR di chuyển đầu in đến đầu dòng, nhưng KHÔNG tiến hành giấy. Điều này cho phép "in đè", đặt nhiều dòng đầu ra trên một dòng. Những thứ như gạch chân đã đạt được theo cách này, cũng như in BÓNG. LF nâng cao giấy một dòng. Nếu không có CR, dòng tiếp theo sẽ in dưới dạng bước so le vì LF không di chuyển đầu in. FF nâng giấy sang trang tiếp theo. Nó cũng thường di chuyển đầu in đến đầu dòng đầu tiên trên trang mới, nhưng bạn có thể cần CR cho điều đó. Để chắc chắn, hầu hết các lập trình viên đã mã hóa CRFF thay vì CRLF ở cuối dòng cuối cùng trên một trang vì CR thêm do FF tạo ra sẽ không thành vấn đề.


Đây là câu trả lời duy nhất giải thích ý nghĩa đầy đủ của việc trả lại xe ngựa.
Lee

12

Nói ngắn gọn :

Carriage_return ( \rhoặc 0xD): Để nắm quyền kiểm soát tại bắt đầu của cùng một dòng .

Line_Feed ( \nhoặc 0xA): Để Mất quyền kiểm soát tại bắt đầu của dòng tiếp theo .

form_feed ( \fhoặc 0xC): Để nắm quyền kiểm soát tại bắt đầu của trang tiếp theo .


2
Câu trả lời ngắn gọn như thế này nên được khuyến khích.
dùng5280911

10

Như một bổ sung,

1, Vận chuyển trở lại : Đó là một thuật ngữ máy in có nghĩa là thay đổi vị trí in thành đầu dòng hiện tại . Trong thế giới máy tính, nó có nghĩa là quay trở lại điểm bắt đầu của dòng hiện tại trong hầu hết các trường hợp nhưng hiếm khi là viết tắt của dòng mới.

2, Nguồn cấp dữ liệu : Đó là một thuật ngữ máy in có nghĩa là nâng cấp một dòng giấy. Vì vậy, Vận chuyển trở lại và Nguồn cấp dữ liệu được sử dụng cùng nhau để bắt đầu in khi bắt đầu một dòng mới. Trong thế giới máy tính, nó thường có cùng ý nghĩa với dòng mới.

3, Form feed : Đó là một thuật ngữ máy in, tôi thích lời giải thích trong chủ đề này .

Nếu bạn đang lập trình cho một máy in kiểu thập niên 1980, nó sẽ đẩy giấy ra và bắt đầu một trang mới. Bạn gần như chắc chắn không bao giờ cần nó.

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

Nó gần như lỗi thời và bạn có thể tham khảo Escape Sequ \ f - form feed - chính xác thì nó là gì? để giải thích chi tiết.

Lưu ý, chúng ta có thể sử dụng CR hoặc LF hoặc CRLF để đại diện cho dòng mới trong một số nền tảng nhưng dòng mới không thể đứng bên cạnh họ trong một số nền tảng khác. Tham khảo wiki Newline để biết chi tiết.

LF: Các hệ thống giống như Multics, Unix và Unix (Linux, OS X, FreeBSD, AIX, Xenix, v.v.), BeOS, Amiga, RISC OS, và các hệ thống khác

CR: Máy 8 bit hàng hóa, Acorn BBC, ZX Spectrum, TRS-80, gia đình Apple II, Oberon, hệ điều hành Mac cổ điển cho đến phiên bản 9, MIT Lisp Machine và OS-9

RS: Triển khai QNX trước POSIX

0x9B: Máy 8 bit Atari sử dụng biến thể ATASCII của ASCII (155 ở dạng thập phân)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS, v.v.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari Tosh, OS / 2, Symbian OS, Palm OS, CPC Amstrad và hầu hết các HĐH không phải Unix và không phải IBM khác

LF + CR: Acorn BBC và RISC OS xuất ra văn bản.


3

"\ n" là ký tự dòng. Nó có nghĩa là kết thúc dòng hiện tại và đi đến một dòng mới cho bất cứ ai đang đọc nó.


3

Quay trở lại vận chuyển và nguồn cấp dữ liệu cũng là tài liệu tham khảo cho máy đánh chữ, trong đó với một cú ấn nhỏ vào tay cầm ở phía bên trái của vận chuyển (nơi giấy đi), giấy sẽ xoay một lượng nhỏ xung quanh xi lanh, tiến lên tài liệu một dòng. Nếu bạn đã gõ xong một dòng và muốn tiếp tục tiếp theo, bạn đã đẩy mạnh hơn, cả hai tiến lên một dòng và trượt cỗ xe sang bên phải, sau đó tiếp tục gõ từ trái sang phải một lần nữa khi cỗ xe di chuyển với mỗi lần gõ phím . Không cần phải nói, word-quấn là cài đặt mặc định cho tất cả xử lý văn bản của thời đại. P: D


2

Đó là những ký tự không in, liên quan đến khái niệm "dòng mới". \ n là nguồn cấp dữ liệu. \ r là vận chuyển trở lại. Trên các nền tảng khác nhau, chúng có ý nghĩa khác nhau, liên quan đến một dòng mới hợp lệ. Trong các cửa sổ, một dòng mới là \ r \ n. Trong linux, \ n. Trong mac, \ r.

Trong thực tế, bạn đặt chúng vào bất kỳ chuỗi nào và nó sẽ có hiệu lực khi in ra khỏi chuỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.