今天寫程式時,用到了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 到底是由什麼基礎資料型別 (Elementary Data Type)來定義的。輸入shell命令:grep ‘__time_t’ /usr/include/*.h 斷行符號,結果如下:
注意,圖中標出的一句話:它明確的告訴我們:在 /usr/include/bits/types.h 檔案中,為我們定義了符號 __time_t 。
4,用vi 編輯器開啟檔案types.h 檔案,搜尋 __time_t , 結果如下:
此時,各位童鞋是不是有種淚奔的感覺,反正我有了……可是輕易放棄不是咱程式猿的臭脾氣啊,帶著一股倔勁,繼續。紅線框中的那一句告訴我們:__time_t 是從Epoch開始的秒數(Epoch:Unix時間戳記,代表一個特定的時間:1970-01-01 00:00:00 UTC,不瞭解的請baidu),而且被定義成了標準資料類型__TIME_T_TYPE , 接下來,你猜到我要幹什麼了嗎。對了,就是重複上邊的步驟,查查 __TIME_T_TYPE 到底是個啥玩意。
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 類型……
補充:vim編輯器的尋找字串的功能;
一,用/和。的區別
/後跟尋找的字串。vim會顯示文本中第一個出現的字串。
。後面跟尋找的字串。vim會顯示文本中最後一個出現的字串。
不管是用/和。尋找到的第一個字串後,按斷行符號,vim會高亮所有的匹配字串
按n或shift+n 可以下一個或者上一個