coreutils5.0 paste.c源碼分析

coreutils5.0 paste.c源碼分析
時間過得真快,一晃又到中餐時間了。我要趕緊再寫一篇。
先說paste的用法。
paste -s
把每個文件變成一行,再把兩個文件合在一起。
paste -s -d: a1 a2
此時,a1中每一行末尾的\n用:來進行分隔。
然後再看相應功能在程序中是如何實現的。
先翻到main函數。
serial_merge=0
在getopt_long中,當分析到-s時
serial_merge++
因此,調用paste_serial函數。
再分析paste_serial函數。
大體邏輯是:
對要合併的文件進行循環
  先打開當前文件
  從當前文件中讀入一個字符到charold
  如果charold!=EOF
    while((charnew=getc(fp))!=EOF){
      如果是回車,就轉爲-d後面的:
      否則直接輸出

      charold=charnew [3]
    }
  把當前打開文件關掉
----------------
我對第【3】這一句有些不解,猜想,也許是要把文件末尾的回車不用-d後的:替換吧。
好讀書,不求甚解。我讀代碼也一樣,好讀代碼,不求一步精確理解。慢慢來吧。先根據熟悉的用法,去在代碼中找出實現邏輯。把大的邏輯理解了,再看如何一步一步出來的。
就這樣。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章