我目前正在嘗試使「C」多一點的腳本語言像我自己一樣。我將程序特定的代碼寫入* .so文件,在運行時重新加載此文件並執行我編寫的新代碼。sys函數調用「stat」更改我的文件嗎?
我面臨的問題是函數「stat」的結果。每次我詢問SO文件是否已經通過「stat(filename,statbuf)」修改時,結果stat-> mtim似乎總是被改變。因此,我不斷在每次循環運行中重新加載我的代碼。
我假設如果沒有文件更改爲文件發生st_mtime必須始終相同。我錯了嗎?
在這裏,我如何檢索值st_mtime功能:
inline timespec LinuxGetLastWriteTime(const std::string& filename) {
struct stat *buf;
stat(filename.c_str(), buf);
return buf->st_mtim;
}
而且在這兒,我檢查,如果我需要重新加載:
timespec NewSOWriteTime = LinuxGetLastWriteTime(SoSource);
if (Game.last_modification != NewSOWriteTime) {
LinuxUnloadGameCode(&Game);
Game = LinuxLoadGameCode(SoSource, "libCode_temp.so");
}
和我的兩個重載=和<!
bool operator<(const timespec& lhs, const timespec& rhs) {
if (lhs.tv_sec == rhs.tv_sec)
return lhs.tv_nsec < rhs.tv_nsec;
else
return lhs.tv_sec < rhs.tv_sec;
}
bool operator!=(const timespec& lhs, const timespec& rhs) {
if (lhs.tv_sec == rhs.tv_sec)
return lhs.tv_nsec != rhs.tv_nsec;
else
return lhs.tv_sec != rhs.tv_sec;
任何想法,爲什麼這可能會發生
'st_mtim'的時間是'time_t',而不是'timespec'。從顯示的代碼中遺漏的是'timepec'是如何從'time_t'構造的。你初始化了所有的成員嗎? 'time_t'給你秒。如果那些是平等的,但是一些'tv_nsec'成員是垃圾? – Kaz
作爲一般建議,在Linux上,您可以在'valgrind'下運行程序並跟蹤錯誤。 – Kaz
jupp在過去st_mtim是時間time_t,但至少在我的平臺ubuntu 14.04現在是timespec [見圖](http://imgur.com/BkAxkPv)。所以它不是由time_t構造的,而是從函數調用「stat」中「初始化」的。 – ExOfDe