首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用fdopen()后出现错误22

调用fdopen()后出现错误22
EN

Stack Overflow用户
提问于 2012-06-23 10:20:09
回答 1查看 1K关注 0票数 0

我在调用fdopen时收到一个错误,它将errno设置为22。我正在使用exec命令调用子进程。子进程对文件描述符4调用fdopen。第一个子进程工作并将数据发送回父进程,errno为0。父进程创建下一个子进程后,将在errno设置为22时再次调用fdopen(4, "w");

据我所知,fdopen()errno 22可能意味着模式参数是不正确的。我还读到这可能是来自fnctl的错误,这可能意味着文件描述符不正确。我指定文件描述符4,它在第一个子进程上工作。这是否就是为什么当我尝试创建另一个FILE*errno被设置为22的原因

我不知道它什么时候对一个子进程有效,而对下一个子进程无效。有人能为我解释一下吗?

代码如下:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2012-06-23 10:23:50

对于第一个子进程,文件描述符的编号是4。对于第二个子进程,父进程中使用的是4,因此它会获得其他一些文件描述符编号。子进程要么必须搜索文件描述符,要么父进程必须通过子进程的命令行或其他方式与环境中的子进程进行通信。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11166273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档