linux與windows回車換行符的區別

2021-05-23 20:50:57 字數 3296 閱讀 6655

「回車」(carriage return)vs  「換行」(line feed)

在計算機還沒有出現之前,有一種叫做電傳打字機(teletype model 33)的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。

於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。乙個叫做「回車」,告訴打字機把列印頭定位在左邊界;另乙個叫做「換行」,告訴打字機把紙向下移一行。

這就是「換行」和「回車」的來歷,從它們的英語名字上也可以看出一二。

後來,計算機發明了,這兩個概念也就被般到了計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加乙個就可以。於是,就出現了分歧。

unix系統裡,每行結尾只有「《換行》」,即「/n」;windows系統裡面,每行結尾是「《換行》《回車》」,即「/n/r」;mac系統裡,每行結尾是「《回車》」。乙個直接後果是,unix/mac系統下的檔案在windows裡開啟的話,所有文字會變成一行;而windows裡的檔案在unix/mac下開啟的話,在每行的結尾可能會多出乙個^m符號。

c語言程式設計時(windows系統)

/r 就是return 回到 本行 行首 這就會把這一行以前的輸出 覆蓋掉

如:int main()

最後只顯示 xixi 而 hahaha 背覆蓋了

/n 是回車+換行 把游標 先移到 行首 然後換到下一行 也就是 下一行的行首拉

int main()

所謂回車、換行這些控制符,都是從以前的電傳打字機的控制命令繼承下來的。回車就是列印頭復位,換行就是走紙。dos/windows和unix/linux對回車、換行的理解差別就在於dos/windows認為0d=0d0a=0a,而unix/linux堅持沿用電傳打字機的工作方式(這個其實是比較正確的)。

所以在回車換行在linux中是"0d",在windows中是"0d0a".我們可以通過下面的程式測試一下:

上面的紅色字型估計是原作者筆誤,linux的換行符是/n,ascii碼是0a,而不是0d。至於要測試的話,可以使用od -t x1 檔名去檢視。

而/r在linux下的vi看到的是藍色的^m

,是使用ctrl+m+v輸出的,可以在命令模式中使用

:%s/^m//g刪除,或者使用dos2unix去掉。

int main()

程式中檔案linux.txt是從linux系統中copy過來的。

我們可以通過這個程式觀察到,通過過濾掉回車換行符,linux檔案中的字元數的減少等於其行數,而

windows中等於其行數的兩倍。但有乙個問題要注意,程式中行:

file *fp = fopen("linux.txt", "rb");

不能寫成:

file *fp = fopen("linux.txt", "r");

後者預設的檔案開啟方式是文字方式,這時系統自動對文字進行了轉換,就不能得到上述的結論。

不過大家可以在windows下用工具hexworkshop,在linux下用命令hexdump直接觀察具體的二進位制**,更為直接。

關於回車和換行的歷史。

回車和換行關於「回車」(carriage return)和「換行」(line feed)這兩個概念的來歷和區別。

在計算機還沒有出現之前,有一種叫做電傳打字機(teletype model 33)的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。

於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。乙個叫做「回車」,告訴打字機把列印頭定位在左邊界;另乙個叫做「換行」,告訴打字機把紙向下移一行。

這就是「換行」和「回車」的來歷,從它們的英語名字上也可以看出一二。

後來,計算機發明了,這兩個概念也就被般到了計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加乙個就可以。於是,就出現了分歧。

unix系統裡,每行結尾只有「《換行》」,即「/n」;windows系統裡面,每行結尾是「《換行》《回 車》」,即「/n/r」;mac系統裡,每行結尾是「《回車》」。乙個直接後果是,unix/mac系統下的檔案在windows裡打 開的話,所有文字會變成一行;而windows裡的檔案在unix/mac下開啟的話,在每行的結尾可能會多出乙個^m符號。

dos和windows採用回車+換行cr/lf表示下一行,

而unix/linux採用換行符lf表示下一行,

蘋果機(mac os系統)則採用回車符cr表示下一行.

cr用符號'/r'表示, 十進位制ascii**是13, 十六進製制**為0x0d;

lf使用'/n'符號表示, ascii**是10, 十六制為0x0a. 所以windows平台上換行在文字檔案中是使用 0d 0a 兩個位元組表示, 而unix和蘋果平台上換行則是使用0a或0d乙個位元組表示.

一般作業系統上的執行庫會自動決定文字檔案的換行格式. 如乙個程式在windows上執行就生成cr/lf換行格式的文字檔案,而在linux上執行就生成lf格式換行的文字檔案. 在乙個平台上使用另一種換行符的檔案檔案可能會帶來意想不到的問題, 特別是在編輯程式**時. 有時候**在編輯器中顯示正常, 但在編輯時卻會因為換行符問題而出錯. 很多文字/**編輯器帶有換行符轉換功能, 使用這個功能可以將文字檔案中的換行符在不同格式單互換.

在不同平台間使用ftp軟體傳送檔案時, 在ascii文字模式傳輸模式下, 一些ftp客戶端程式會自動對換行格式進行轉換. 經過這種傳輸的檔案位元組數可能會發生變化. 如果你不想ftp修改原檔案, 可以使用bin模式(二進位制模式)傳輸文字.

windows與linux下回車與換行

關於 回車 carriage return 和 換行 line feed 這兩個概念的來歷和區別。在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33 的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0...

Windows與Linux的回車換行轉換

最初 r return 表示 回車 即回到行首,n next 表示 換行 即定位到下一行 unix和linux使用 n 換行,而windows用 r n 不是 n r,已驗證 macos用 r linux文字傳到windows一般少了乙個換行 windows傳到linux的檔案,如果是一般文字文件顯...

回車和換行在linux下和windows下

今天,我總算搞清楚 回車 carriage return 和 換行 line feed 這兩個概念的來歷和區別了。1.在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33 的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打...