1. 程式人生 > >coreutils-4.5.1/basename.c 讀原始碼的方法

coreutils-4.5.1/basename.c 讀原始碼的方法

coreutils-4.5.1/basename.c 讀原始碼的方法
為了按行數看程式碼的命令寫錯了,應該寫成這樣:
ls -s *.c | sort -n -k1 | more

我想,讀原始碼,的最大方法,是要改於開啟原始碼,開始讀,只要開始了,方法總會有的。
路雖遠,行則達。
有時,我感覺很急,你看,我翻ruby0.49時,想,這個程式碼我連編譯都不成功,而且這麼多程式碼沒看懂,可新的版本又出來了。你有一種想追,卻總是追 不上的感覺。
很令人傷心。
現在,我只能安慰自己,把心放在當下,就算真看完了最新版本的原始碼,那又如何這世界永遠都有無窮的奧祕等待我們去探索。既然如此,那何不享受當下。
開啟basename.c
作者在註釋中加了測試程式碼,太妙了。

basename  /usr/foo/abc.xya  .xya
abc
我終於明白,這個SUFFIX是什麼意思了,大致是把字尾去掉。再讀程式碼
remove_suffix(char *name,const char *suffix)
{
    while (np>name && sp>suffix)
        if (*--np != *--sp) 
            return ;
略去---
}
因為我在linux下讀程式碼,拷出來不便,所以只敲擊核心程式碼。這個程式碼寫得可真漂亮。
字字珠磯呀。
要去掉兩個字串末尾相同的字尾,先讓它們都指向末尾,再看末尾有多少相同的,找到位置後,在最後一個相同的字元改為'\0',即實現了,把
"abc.xya"中.xya去掉的效果,太妙了。不過,我可要除錯下,為何是
if (np>name) *np='\0';
而不是np++後,再賦值呢?這個加減一邏輯,我可要想想!!!
我想最重要的是要把英語學好。