虽然读得不多,不过可以分享下经验。我也曾经找过些源码来读,不过一般是因为想了解某些东西背后是怎么实现的。比如说tail命令、libc里的qsort和一些其他的细节(比如stdin是哪儿来的)。这些东西首先让人头疼的是,代码从哪儿找。像tail这种原先属于textutils,后来被并入coreutils里的小东西,找起来就有点费劲。qsort也有点费劲,虽然是属于libc,但是libc的实现有好多个,比如Ubuntu下一般用的是eglibc。不过它们的好处是,你起码知道其运行的基本流程,看代码的时候心里有底。这些小东西虽然功能不复杂,但是实际上代码也不短(比如tail,至少2000+行,还不包括一些额外的辅助函数),总之还是要花点时间,还是能啃下来的。至于量比较大的那种源码,我看得不多。完整看完的量比较多的,就一个叫Mini-OS的操作系统源码(Xen自带的小OS,其实代码也就1w+行的样子),是在把握了整体的情况下(当时项目组在做Xen相关的东西),一行一行一个文件一个文件地去看,边看边加注释(往往你觉得看懂了的东西,写下来还会有一番收获,如果能向别人讲出来,那收获就更大),看了好些天,也还是啃下来了。最近有一个想看的源码是Lua的源码。但是由于不搞游戏开发,对Lua的了解很少,所以上手有点困难。除此之外,我看的代码,基本都是整体的一个小部分,比如说apache的mod_proxy模块(想改改)、php模块(想了解某些实现细节)之类。这些东西会了一个,其他的都触类旁通了(由于写过php的模块,所以看php的模块代码时就比较轻松)。最后建议是,在看代码之前,对你想看的代码一定要有个大致的了解,它是做什么的,框架大概如何,试着去用用它,从某个细节上先打入内部。所谓万事开头难,其实一旦开始看进去,也不是有多难(虽然曾经想看kernel中write的实现,但是还是有点吃力=。=)。
虽然读得不多,不过可以分享下经验。
我也曾经找过些源码来读,不过一般是因为想了解某些东西背后是怎么实现的。比如说tail命令、libc里的qsort和一些其他的细节(比如stdin是哪儿来的)。
这些东西首先让人头疼的是,代码从哪儿找。像tail这种原先属于textutils,后来被并入coreutils里的小东西,找起来就有点费劲。qsort也有点费劲,虽然是属于libc,但是libc的实现有好多个,比如Ubuntu下一般用的是eglibc。不过它们的好处是,你起码知道其运行的基本流程,看代码的时候心里有底。这些小东西虽然功能不复杂,但是实际上代码也不短(比如tail,至少2000+行,还不包括一些额外的辅助函数),总之还是要花点时间,还是能啃下来的。
至于量比较大的那种源码,我看得不多。完整看完的量比较多的,就一个叫Mini-OS的操作系统源码(Xen自带的小OS,其实代码也就1w+行的样子),是在把握了整体的情况下(当时项目组在做Xen相关的东西),一行一行一个文件一个文件地去看,边看边加注释(往往你觉得看懂了的东西,写下来还会有一番收获,如果能向别人讲出来,那收获就更大),看了好些天,也还是啃下来了。
最近有一个想看的源码是Lua的源码。但是由于不搞游戏开发,对Lua的了解很少,所以上手有点困难。
除此之外,我看的代码,基本都是整体的一个小部分,比如说apache的mod_proxy模块(想改改)、php模块(想了解某些实现细节)之类。这些东西会了一个,其他的都触类旁通了(由于写过php的模块,所以看php的模块代码时就比较轻松)。
最后建议是,在看代码之前,对你想看的代码一定要有个大致的了解,它是做什么的,框架大概如何,试着去用用它,从某个细节上先打入内部。所谓万事开头难,其实一旦开始看进去,也不是有多难(虽然曾经想看kernel中write的实现,但是还是有点吃力=。=)。