gpt4 book ai didi

C pipe() 在调用一定次数后返回错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:54 28 4
gpt4 key购买 nike

我写这个函数是为了与外部程序通信。这样的程序从 stdin 获取输入并在 stdout 上打印它的输出。为了使我的代码与该程序通信,我使用管道将标准输入和标准输出重定向到缓冲区。

int query_oracle(mpz * c,int *t, mpz * m) {
int out_pipe[2];
int in_pipe[2];
int saved_stdout;
int saved_stdin;

// REDIRECT STDIN
saved_stdin = dup(STDIN_FILENO); /* save stdin for later */
pipe(in_pipe); /* make a pipe */
close(STDIN_FILENO);
dup2(in_pipe[0], STDIN_FILENO); /* redirect pipe to stdin */
//write(in_pipe[1], in_buf, strlen(in_buf));

// REDIRECT STDOUT
saved_stdout = dup(STDOUT_FILENO); /* save stdout for display later */
if( pipe(out_pipe) != 0 ) { /* make a pipe */
exit(1);
}
dup2(out_pipe[1], STDOUT_FILENO); /* redirect stdout to the pipe */
close(out_pipe[1]);

/* Some reads and writes on the pipes occur here
* so that the program can communicate with an
* external program*/

dup2(saved_stdout, STDOUT_FILENO); /* reconnect stdout */
dup2(saved_stdin, STDIN_FILENO); /* reconnect stdin */

return 0;
}

问题是我第 204 次调用此函数时,pipe() 返回错误 (-1)!知道为什么会这样,或者我该如何避免?非常感谢

更多细节:这是在 Linux 上。 uname -a 的结果是:

 Linux snowy.*****.ac.uk 2.6.32-71.el6.x86_64 #1 SMP Fri May 20 03:51:51 BST 2011 x86_64 x86_64 x86_64 GNU/Linux

最佳答案

您可能正在运行我们的文件描述符。看起来您可能不会在 fork 远程程序后关闭程序中的 in_pipe[1] 和 out_pipe[0],或者永远不会关闭。

关于C pipe() 在调用一定次数后返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9890337/

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