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
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼SQL原始碼
- ReactorKit原始碼閱讀React原始碼
- Vollery原始碼閱讀(—)原始碼
- NGINX原始碼閱讀Nginx原始碼
- ThreadLocal原始碼閱讀thread原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- Runtime 原始碼閱讀原始碼
- RunLoop 原始碼閱讀OOP原始碼
- AmplifyImpostors原始碼閱讀原始碼
- stack原始碼閱讀原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- fuzz原始碼閱讀原始碼
- HashMap 原始碼閱讀HashMap原始碼
- delta原始碼閱讀原始碼
- AQS原始碼閱讀AQS原始碼
- Mux 原始碼閱讀UX原始碼
- ConcurrentHashMap原始碼閱讀HashMap原始碼
- HashMap原始碼閱讀HashMap原始碼
- Laravel 原始碼閱讀指南 -- Cookie 原始碼解析Laravel原始碼Cookie
- 我的原始碼閱讀之路:redux原始碼剖析原始碼Redux
- 如何閱讀Java原始碼?Java原始碼
- buffer 原始碼包閱讀原始碼
- 使用OpenGrok閱讀原始碼原始碼
- express 原始碼閱讀(全)Express原始碼
- Kingfisher原始碼閱讀(一)原始碼
- 如何閱讀框架原始碼框架原始碼
- 如何閱讀jdk原始碼?JDK原始碼
- ArrayList原始碼閱讀(增)原始碼
- snabbdom 原始碼閱讀分析原始碼
- Appdash原始碼閱讀——reflectAPP原始碼
- React原始碼閱讀:setStateReact原始碼
- 原始碼閱讀工具-understand原始碼
- koa原始碼閱讀[0]原始碼
- basictracer原始碼閱讀——TracerImpl原始碼