呼び出し時にエラーが発生し、22 にfdopen
設定errno
されます。exec コマンドを使用して子プロセスを呼び出しています。子はfdopen
ファイル記述子 4 を呼び出します。最初の子は機能し、データを親に送り返します。親errno
は 0 です。親が次の子プロセスを作成した後、fdopen(4, "w");
再度呼び出されます。これは がerrno
22 に設定されている場合です。
私が読んだことから、errno
22 forfdopen()
はモード引数が正しくないことを意味する可能性があります。fnctl
また、それはエラーである可能性があり、それはファイル記述子が悪いことを意味する可能性があることも読みました。ファイル記述子 4 を指定すると、最初の子プロセスで動作します。errno
別の を作成しようとすると 22 に設定されているのはそのためでしょうFILE*
か?
ある子プロセスではいつ機能するのかわかりませんが、次の子プロセスでは機能しません。誰かが私のためにこれに光を当てることができますか?
コードは次のとおりです。
int main(int argc, char* argv[])
{
cout << "Child " << argv[argc-1] << " starting" << endl;
//close(3);
if(argc < 1) fatal("Not enough arguments provided to ChildMain");
int id = atoi(argv[argc-1]);
//Child kid((int) *argv[1]);
cout << "Error before fdopen(): " << errno << endl;
FILE* out = fdopen(4, "w");
if(out == NULL)
{
cout << "Child ID: " << id << endl;
cout << "\tError: " << errno << endl << endl;
}
int ret = fprintf(out, "%d", id);
fflush(out);
return 0;
}