fork-exec パターンを使用してコードを書いています。子プロセスは、出力を書き込むために /tmp ディレクトリ (追加作成モード) でファイルを開くことを意図しています。(ファイルは事前に存在しませんが、開いたときに作成されるか、少なくともそうあるべきです...)しかし、実行後に子がファイルを開くことができないことがわかりました。ファイルを開いて作成し、fork の後、exec の前に書き込むことができますが、exec の後、ファイルが作成されないことがわかりました。さらに、実行中のプログラムをコマンド ラインで (同じ引数を使用して) 実行すると、ファイルが作成され、問題なく書き込まれます。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...
}