gpt4 book ai didi

c++ - 调用 fdopen() 后出现 Errno 22

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:13 25 4
gpt4 key购买 nike

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

根据我的阅读,fdopen()errno 22 可能意味着模式参数不正确。我还读到它可能是 fnctl 的错误,这可能意味着文件描述符错误。我指定文件描述符 4,它适用于第一个子进程。这就是为什么当我尝试创建另一个 FILE*errno 被设置为 22 的原因吗?

我不知道它何时适用于一个子进程但不适用于下一个。任何人都可以为我阐明这一点吗?

代码如下:

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;
}

最佳答案

对于第一个子进程,文件描述符的编号是 4。对于第二个子进程,4 在父进程中使用,因此它获得了一些其他文件描述符编号。 child 要么必须搜索文件描述符,要么 parent 必须在环境中、在 child 的命令行上或以其他方式将其传达给 child 。

关于c++ - 调用 fdopen() 后出现 Errno 22,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11166273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com