linux c 檢視 結構體 巨集 函式 關鍵字定義

2021-07-24 06:23:37 字數 2484 閱讀 6913

在linux c中搜尋 結構體 巨集定義 關鍵字

#查詢結構體

grep -rn --include="*.h" --include="*.c" 'struct ether_header' /usr

#查詢巨集定義

grep -rn --include="*.h" --include="*.c" '#define pcap_errbuf_size' /usr

#查詢關鍵字

grep -rn --include="*.h" --include="*.c" 'pcap_errbuf_size' /usr

#查詢函式

man 3 ntohs

今天寫程式時,用到了pthread_cond_timedwait 函式,其原型為:int pthread_cond_timedwait(pthread_cond_t  *restrict cond , pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime); 最後乙個引數是 timespec 結構體,可惜man裡面沒有給出具體定義,只好自己去查了。下面就說下具體步驟,也算給大家做個參考,同時歡迎提供更好的方法:

1,符號定義基本都在/usr/include資料夾下可以找到 也有可能在/usr/src下(想想自己程式中引用的標頭檔案就明白了)。那麼我們就可以在/usr/include 資料夾下搜尋該結構體定義。輸入shell命令:grep 'struct timespec'  /usr/include/*.h 回車,觀察結果,

從結果中(尤其最後幾行),我們可以很容易發現,struct timespec 結果體被定義在了/usr/include/time.h 檔案中。

2,開啟time.h檔案,檢視具體定義。操作步驟:輸入shell命令:vi /usr/include/time.h 回車 。然後在vi編輯器中搜尋struct timespec 即可找到該結構體的具體定義(對vi編輯器使用不熟的童鞋,請自覺google,baidu)。如下圖所示:

3,如果檢視了該結構體的具體定義,你還不滿意,仍舊對結構體成員中__time_t 這個資料型別耿耿於懷的話,那我們就繼續。按照查詢struct timespec 結構體時的方法,查詢 __time_t 到底是由什麼基本資料型別來定義的。輸入shell命令:grep '__time_t' /usr/include/*.h 回車,結果如下:

注意,圖中標出的一句話:它明確的告訴我們:在 /usr/include/bits/types.h 檔案中,為我們定義了符號 __time_t 。

4,用vi 編輯器開啟檔案types.h 檔案,搜尋 __time_t , 結果如下:

5,輸入shell命令:grep '__time_t_type'  /usr/include/*.h  回車,發現啥也沒找到。仔細一想,第四步中,types.h 檔案在/usr/include/bits/ 資料夾下,那麼它的定義也很有可能就在這哦,接著輸入shell命令:grep '__time_t_type'  /usr/include/bits/*.h 回車,結果如下:(也可以直接用:grep '__time_t_type'  /usr/include/*/*.h  表示搜尋本目錄和子目錄,建議一般別搜尋子目錄,耗時間呀多層搜尋 grep 'time_t_type'usr/*/*/*/*/*.h)

看到這裡,我們就明白了,__time_t_type 被定義在了檔案typesize.h 中,但我們無需開啟檔案,注意後邊那個單詞:__slongword_type  表示__time_t_type  被定義成了 __slongword_type 型別。我們知道,word_type 這種型別基本上都和具體的機器位數有關了。它表示:具體機器上的乙個長型字。

6,如果想檢視具體自己機器上是什麼基本型別的話(機器型別定義在/usr/include/bits/types.h檔案中),可以輸入shell命令:grep 'slongword_type'  /usr/include/bits/types.h  回車(如果忘了在哪個檔案中,也可以直接搜尋所有目錄:grep 'slongword_type'  /usr/include/*/*.h),結果如下:

至此,大功告成,在我的機器上,__slongword_type  就是 long int 型別……

linux c結構體學習

includestruct weaponweapon 1 下面宣告變數的寫法這種類似,這種將weapon 1放在結構體後面宣告只適用於小型系統,如果是單個結構體可以使用struct weapon 1的寫法進行定義int main 宣告變數,定義變數 printf s n,d n weapon 1.n...

Linux C語言結構體

1.展開標頭檔案 作用 2.進行巨集替換 字串替換 3.預處理階段不考慮c的語法的 下面這句經過處理後 i檔案 tni不會被替換成int的。typedef int tni typedef int p p q null 等同於int q null typedef 有乙個作用域。2.結構體初始化和引用 ...

Linux C 10 結構體和共用體

在實際生活中,有大量的由不同性質的資料構成的實體,如通訊錄就是由姓名 位址 號碼等資訊組成。對於這種實體,用陣列是難以描述的,因此,c語言提供了一種被稱為結構體造型資料型別,結構體型別為處理複雜資料型別提供了便利手段。結構體與陣列類似,都是有若干分量組成的,與陣列不同的是,結構體的分量可以是不同型別...