2011-12-19 42 views
2

我有一個跨越數十個文件的C程序。我的目標是編寫一個函數,當被調用時將所有全局變量保存到某個文件並退出到操作系統(Windows中的命令行)。後來,我需要程序從文件中加載全局變量並繼續運行。類似休眠功能的C程序

該程序是一個單線程的exe文件,不加載任何dll。

解決此問題的直接方法是列出所有全局變量(假設我將靜態轉換爲全局變量)並將它們轉儲到文件中。但這是一項單調乏味的工作,因爲可能有成百上千的變量。

是否有其他解決方法,比如傾銷整個數據段並稍後加載?即使我保存了數據段並將其加載回RAM,我也無法將程序變量與數據段的內存塊相關聯。

+1

你的程序有幾千個全局變量?!如果你對設計真的很耐心,那麼可以看看Emacs用'unexec'做了什麼。 – chrisaycock 2011-12-19 20:46:50

+0

在Unix上,一種方法是'mmap'某個文件並在mmapped文件中分配所需的狀態。 – 2011-12-19 20:55:49

+0

@AlexandreC .: Windows有沒有類似的東西? – 2011-12-19 20:59:45

回答

0

現在我從來沒有試過這個,我不知道它是否會工作,但... ... setjmp/longjmp保存環境並恢復它。

我認爲可以使用setjmp將結構(jmp_buf)存儲在一個文件中。然後當應用程序再次加載時,將jmp_bug加載回RAM並運行longjmp。

你覺得怎麼樣?!

+2

'setjmp'僅保存足夠的信息,以便'longjmp'可以將棧放回原來調用setjmp時的位置。 – Ferruccio 2011-12-19 21:25:57