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++後,再賦值呢?這個加減一邏輯,我可要想想!!!
我想最重要的是要把英語學好。

 

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