乙個文字檔案是由行組成的,本文所說的就是行與行之間用來表示新行(newline)的間隔,一般稱作斷行符(link break)或者行結束符(end-of-line, eof)。
由於歷史的原因,不同的作業系統用來表示換行的字元不同,這就給跨作業系統編輯檔案帶來不便。
使用下面的 unicode 標準定義的符號:
不同的作業系統使用的行結束符:
特別的,目前 mac os x 是基於 unix 的,所以行結束符也是 lf。只有 v9 之前 mac os 才是用 '\r'。
為什麼對「另起一行」的處理有這樣的差異,是因為早期的電傳打字機(teletype)從左至右打完一行的時候,需要給印表機頭重新移回左邊界的時間,在乙個字元的時間內,不足以讓印表機頭移動到正確的位置,這樣會影響下乙個字元的列印。所以就需要在一行結束的時候額外傳遞乙個 cr 字元令裝置 carriage 歸位。
進一步閱讀:wikipedia: newline。
一般作業系統的執行庫決定了文字檔案的換行格式,在乙個平台上使用另一種換行符的檔案通常會有問題。大部分編輯器會自動識別換行符型別,並帶有換行轉換的功能。
比如某些 ftp 軟體在進行文字傳輸的時候會對換行符進行轉換(這樣修改了原檔案)。
python 使用 "universal newline" 處理這個問題。在以文字方式 open() 的時候,會對換行符進行識別並一致處理成 '\n',在檔案寫入的時候,也只要 write('\n') 即可,python 會根據作業系統自動處理。有關文件:
C 中的檔案結束符
int main 控制台輸入多個字串後,輸入檔案結束符crtl z,並未使while迴圈結束,該如何跳出while迴圈?解決方法 方法1 回車 ctrl z 回車方法2 改 設定自己的檔案結束符 string a while cin a a x x可以為自己設定的檔案結束符。原因解析 當從鍵盤輸入一...
作業系統中不同的鎖
鎖是執行緒同步時的乙個重要的工具,然而作業系統中包含了多種不同的鎖,各種鎖之間有什麼不同呢?1 訊號量 semaphore 訊號量分為二元訊號量和多元訊號量,所謂二元訊號量就是指該訊號量只有兩個狀態,要麼被占用,要麼空閒 而多元訊號量則允許同時被n個執行緒占有,超出n個外的占用請求將被阻塞。訊號量是...
C 處理檔案結束符的兩種不同方式
首先來看一下下面這小段 include include include int main 裡面while一直檢查輸入流的狀態,知道接收到檔案結束符 在windows上面是ctrl z 在linux unix上面是ctrl d 或錯誤輸入,但是當輸完多個字元再加上乙個檔案結束符再按enter的時候,發...