這個問題在這里已經有了答案: 在運行時編譯程式 3 個回答 1 小時前關閉。
假設我編譯了一些代碼并讓它運行。完成需要 10 分鐘。
同時,如果我更改代碼中的一些引數并使用單獨的終端視窗再次編譯它并運行它(所以現在有兩個程式使用相同的代碼同時運行),第二次運行是否會影響第一個運行的程式?第一個編譯輸出被第二個編譯輸出替換?
uj5u.com熱心網友回復:
該行為不是由 C 標準定義的。通常,會發生以下兩種情況之一(主要取決于作業系統)
第二次編譯將失敗,因為聯結器將無法打開可執行檔案進行寫入。
編譯將成功,并且原始可執行檔案的現有呼叫將不受影響;以后的呼叫將使用新的可執行檔案。
第三種可能性——編譯成功,并擾亂了現有的呼叫——在現代作業系統中是聞所未聞的。
uj5u.com熱心網友回復:
有以下三種可能的情況:
在 Windows 上,可執行檔案在執行時將被鎖定以進行寫入和洗掉,因此構建將失敗。
在 Linux 上,可執行檔案在執行時不需要防止被修改或洗掉。
2.1. 如果從檔案系統中洗掉了一個檔案,然后創建了一個具有相同名稱的新檔案,那么舊檔案內容仍將保留,直到已經運行的可執行檔案退出,而新的可執行檔案將使用新檔案。因此,舊的可執行檔案將繼續正常運行,而新的可執行檔案也將準備就緒。
2.2. 如果一個檔案被打開用于寫入并被新內容覆寫,那么已經運行的可執行檔案將使用新的機器代碼,這很可能與現有程式狀態不兼容并導致崩潰。
uj5u.com熱心網友回復:
唯一合理的答案是行為完全取決于作業系統:C 標準沒有試圖描述可能發生的情況。
您的作業系統供應商可能會擴展記錄或指定行為的常見禮貌,但我從未見過此類檔案。
最好的辦法是不要嘗試這個。
我是一只老貓,這里有一些沉思。由于檔案鎖定,您不太可能在 Windows 上執行此操作。在 Sun 作業站上這是可能的,但是一旦您編譯到與正在運行的可執行檔案相同的位置,該程式似乎根本無法正常運行。嗯,當我在大學使用預標準化的 C 時,肯定是這樣。它只是表現得很奇怪,沒有考慮到它。在rhel 上,它似乎特別適用于小程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/378362.html
上一篇:如何使用grep匹配精確的單詞
