调用时出现错误fdopen
,它设置errno
为 22。我正在使用 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;
}