Linux 下如何檢視C結構體等符號定義

2021-06-13 09:20:06 字數 2075 閱讀 9503

今天寫程式時,用到了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/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  表示搜尋本目錄和子目錄,建議一般別搜尋子目錄,耗時間呀)

看到這裡,我們就明白了,__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結構體定義

今天寫程式時,用到了pthread cond timedwait 函式,其原型為 int pthread cond timedwait pthread cond t restrict cond pthread mutex t restrict mutex,const struct timespec ...

Linux下C結構體初始化

1 前言 今天在公司看一同事寫的 中用到了struct,初始化乙個struct用的是亂序格式,如下 所示 typedef struct data t data t data t data 2 順序初始化 教科書上講c語言結構體初始化是按照順序方式來講的,沒有涉及到亂序的方式。順序初始化struct必...

linux下檢視硬碟型號等資訊

可以用smartctl,hdparm等命令來查詢。在日誌中顯示硬碟有壞扇區 tail var log messages dmesg中也有錯誤資訊 dmesg 對硬碟做一下健康檢查 smartctl h dev hda 檢測通過,保險起見還是準備換硬碟。檢視下當前硬碟的型號,可以得到硬碟介面為sata...