gpt4 book ai didi

c - 如何创建将 stdin 重定向到子进程的代理进程?

转载 作者:行者123 更新时间:2023-11-30 19:23:38 26 4
gpt4 key购买 nike

我想创建一个代理进程来打开真实的进程。

就像我将 linux 的 espeak 重命名为 espeak_real 并将我的应用程序重命名为 espeak 一样。espeak 打开 espeak_real 我得到了输出。

我希望能够:

  • 将 STDIN 打印到控制台
  • 将其 STDIN 打印到另一个进程的 STDIN
  • 打印第二个进程的 STDOUT

我正在尝试用 C 语言实现(我猜用原始 bash 也是可能的)。

最佳答案

我不太明白你在做什么,但它看起来像是forkexecpipe的组合dup2 应该可以做到。

app 可以使用 pipe 获取一对文件描述符,通过管道连接(写入其中一个的内容将从另一个中读取)。
然后它可以 fork,并且子进程可以 exec app_real
但是在forkexec之间,dup2可以用来改变任何你想要的文件描述符为0,1和2(但是关闭真正的0 ,1,2) 首先。

短代码示例:

int pipe_fds[2];
pipe(pipe_fds);
if (fork()==0) {
// Child
close(fds[1]); // This side is for the parent only
close(0); // Close original stdin before dup2
dup2(fds[0],0); // Now one side of the pipe is the child's stdin
close(fds[0]); // No need to have it open twice
exec(...);
} else {
// Parent
close(fds[0]); // This side is for the child only
write(fds[1],data,len); // This data goes to the child
}

关于c - 如何创建将 stdin 重定向到子进程的代理进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473409/

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