dos2unix與unix2dos之學習記錄

2021-09-07 22:05:20 字數 1298 閱讀 5078

1. unix2dos與dos2unix這兩個tool是用來幹什麼的?

這首先應該要說明一下背景知識:

unix類作業系統下,換行字元是\n;

而早期的dos作業系統,其換行字元是由\r\n組成。

所以如果將unix系統下的文字檔案copy到dos系統下

或者將dos系統下的文字檔案拷貝到unix下可能會存在問題。

所以就出現了unix2dos以及dos2unix這兩個tool。

2. 為什麼早期的作業系統換行需要用\r\n兩個字元來表示?

關於這個歷史就當是看故事吧。

在計算機出現之前,有一種叫做電傳印表機的裝置,每秒鐘列印10個字元,

但是當一行列印結束,需要換到下一行時,需要耗時0.2s做換行回車的動作

將印表機指向下一行起始位置。而如果在這過程中有新的字元傳過來,

則該新字元就會丟失。那為了解決這個問題,研究人員就想到了在回車換行的

過程中多列印\r\n這兩個不會影響到顯示的字元來解決可能存在的字元丟失問題。

而隨著計算機的發展,科學家發現用\n乙個字元即可達到這種換行回車的目的了。

3. linux系統下的文字檔案直接copy到windows下面顯示只會顯示出一正行長長的字串?

這個目前我也不確定,需要通過實驗以及更豐富的理論知識來確認。

如果有知道的朋友,也可以跟我講喔,謝謝。

4. 所以dos系統下文字檔案的size要比unix系統下文字檔案的size要小?

毫無疑問,在二者顯示內容完全相同的情況下dos系統文字檔案每一行都會多乙個\r字元。

5. unix2dos源**應該如何實現?

綜上所講,我們知道unix2dos其實很簡單的就是在每乙個\n字元前面不上\r字元。

假設unix2dos這個tool的用法是:

./unix2dos ./unix_file ./dos_file

那偽**過程基本如下:

#include

#include

int main(int argc, char *ar**)

else}}

6. dos2unix源**應該如何實現?

dos2unix的**實現很類似,區別在於如果連續的兩個字元分別為\r,\n,

則需要將\n之前的\r字元刪除掉。所以網上有朋友寫了類似的程式將檔案

中所有的\r字元刪除是不正確的,因為\r可能是使用者特定有用的字元。

部分**如下:

while(!feof(fp_dos))

else}

以上**並未做諸多引數有效性檢查,出錯處理等,僅供參考。

unix2dos和dos2unix處理換行問題

今天同事qq給發來乙個檔案內容如下 希望把檔案內容轉換為update table name set col name 第一列 where col name 第二列 這種sql格式,使用ue列模式秒秒鐘改完,但是突然想用awk拼一下,於是寫了如下語句 cat certificate id awk 萬萬...

dos2unix與靜態庫

今天mayuyu要講兩個問題 dos2unix的作用,靜態庫與靜態編譯 1 dos2unix的作用 dos格式檔案傳輸到unix系統時,會在每行的結尾多乙個 m,所以要進行格式轉化,dos2unix就是用來作格式 轉化的。在linux中,文字檔案用 n 表示回車換行,而windows用 r n 表示...

dos2unix整個目錄

因為經常在windos平台和linux平台之間協同開發,所以不可避免的就碰到了crlf的問題,dos2unix 和 unix2dos可以說是最常用的解決crlf問題的工具了。下面列出怎麼對整個目錄中的問題做dos2unix操作 find type f exec dos2unix 其中具體命令的解釋如...