C庫原始碼閱讀(快速定位原始碼)
雖然一直在寫Java,看了些Java類庫原始碼之後,對一直感興趣的C庫原始碼也想探索一下。倒騰了一下,在windows下終於解決了如何快速定位自己想看的C函式原始碼檔案的方法,也有一點小收穫,終結如下:
1、這裡說的C庫原始碼是GNU glibc,網址:
http://ftp.gnu.org/gnu/glibc/
2、平時呼叫的C函式,在原始碼中是以單獨檔案的形式存在。例如,printf函式路徑..\glibc-2.20\stdio-common\printf.c
程式碼如下:#include <libioP.h>
#include <stdarg.h>
#include <stdio.h>
#undef printf
/* Write formatted output to stdout from the format string FORMAT. */
/* VARARGS1 */
int
__printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
#undef _IO_printf
ldbl_strong_alias (__printf, printf);
/* This is for libg++. */
ldbl_strong_alias (__printf, _IO_printf);
這裡需要說明的是原始碼中的printf函式前面有一個下劃線,這是為了執行時方便被組合語言呼叫。
3、在windows下快速定位C函式原始碼檔案方法:dir C:\Users\...(glibc原始檔存放路徑)\glibc-2.20 /s /b | find "printf.c"
執行結果如下(片段):C:\Users\zhoujw\Desktop\glibc-2.20\glibc-2.20\stdio-common\printf.c
C:\Users\zhoujw\Desktop\glibc-2.20\glibc-2.20\stdio-common\reg-printf.c
C:\Users\zhoujw\Desktop\glibc-2.20\glibc-2.20\stdio-common\snprintf.c
C:\Users\zhoujw\Desktop\glibc-2.20\glibc-2.20\stdio-common\sprintf.c
C:\Users\zhoujw\Desktop\glibc-2.20\glibc-2.20\stdio-common\test-vfprintf.c
在Linux shell下同樣有find命令。
4、聽說windows下看原始碼用source insight,正在學習,有經驗者還請多指教。在Linux下采用sublime text和ctags配合,閱讀C原始碼非常方便。相關文章
- 如何快速閱讀原始碼原始碼
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- 閱讀C++原始碼必備C++原始碼
- PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼SQL原始碼
- ReactorKit原始碼閱讀React原始碼
- AQS原始碼閱讀AQS原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- HashMap 原始碼閱讀HashMap原始碼
- delta原始碼閱讀原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- NGINX原始碼閱讀Nginx原始碼
- Mux 原始碼閱讀UX原始碼
- HashMap原始碼閱讀HashMap原始碼
- fuzz原始碼閱讀原始碼
- RunLoop 原始碼閱讀OOP原始碼
- express 原始碼閱讀Express原始碼
- muduo原始碼閱讀原始碼
- stack原始碼閱讀原始碼
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- Laravel 原始碼閱讀指南 -- Cookie 原始碼解析Laravel原始碼Cookie
- 我的原始碼閱讀之路:redux原始碼剖析原始碼Redux
- 怎麼閱讀原始碼【除錯觀察原始碼】原始碼除錯
- Android原始碼閱讀-編譯8.0原始碼Android原始碼編譯
- Laravel 原始碼閱讀 - QueueLaravel原始碼
- Vollery原始碼閱讀(—)原始碼
- 使用OpenGrok閱讀原始碼原始碼
- 如何閱讀Java原始碼?Java原始碼
- buffer 原始碼包閱讀原始碼
- 原始碼閱讀技巧篇原始碼
- 如何閱讀框架原始碼框架原始碼
- 再談原始碼閱讀原始碼
- Laravel 原始碼閱讀 - EloquentLaravel原始碼
- 如何閱讀jdk原始碼?JDK原始碼
- express 原始碼閱讀(全)Express原始碼
- Vuex原始碼閱讀分析Vue原始碼
- React原始碼閱讀:setStateReact原始碼