我正在用fork-exec模式編寫一些代碼,並且子進程打算在/ tmp目錄(append-create模式)中將文件寫入其輸出。 (該文件並不是事先存在的,而是在打開時創建的,或者至少應該是......)但是,我發現孩子在執行後無法打開任何文件。它可以在fork之前和exec之前打開/創建一個文件並寫入它,但在exec之後,我發現文件沒有被創建。此外,如果我在命令行運行該程序,我正在執行(使用相同的參數),它會創建該文件並將其寫入其中。只有從exec開始纔會出現這個問題。我真的不知道該如何開始思考這個問題......如果有人有在哪裏尋找線索的建議,我會非常感激!無法在fork-exec後打開文件
這裏有一個粗略的例子 - 注意,這是不是在運行:) 兒童實際代碼:
#define MSG "Opened file: "
int main (usual stuff) {
const char* szTemp = "/tmp/helloworld";
FILE* temp = fopen(szTemp, "a");
fwrite(MSG, sizeof(char), strlen(MSG), temp);
fwrite(szTemp, sizeof(char), strlen(szTemp), temp);
fwrite("\n", sizeof(char), 1, temp);
fclose(temp);
// at this point, I see the file with the normal content when Child is run
// from the command line, but the file is not created if Child is created
// by a call to exec
}
家長:
int main(usual stuff) {
pid_t pid = fork();
if (0 == pid) {
// fopen/fwrite works fine if I do it here!
exec(child-process);
}
// parent continues...
}
發佈你的代碼可能會導致有用的反應。 – bmargulies
我添加了一些說明性的代碼...我的實際代碼是整個系統的~20000行,正如我所說我很笨拙,不知道從哪裏開始尋找問題,所以我不知道哪個所有代碼的一小部分與您分享。如果任何人有關於我應該從哪裏開始尋找的建議,我可以嘗試提供一些代碼...... –
我認爲您需要製作[SSCCE](http://sscce.org/)。很可能你會在製作一個小例子向我們展示問題的過程中發現實際問題。事實上,我知道有可能編寫一個正如你所描述的正確的程序,所以我們所能做的只是猜測那20000行代碼中可能會出現什麼問題。 – Casey