gpt4 book ai didi

C - 重定向子进程的IO

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:57 26 4
gpt4 key购买 nike

我正在尝试将子进程的 IO(在 fork() 之后)重定向到一个文件中,但我不明白为什么它不起作用。

这是我所做的:

if(fork() == 0){
execv(exe, (char*[]){ exe, "> temp.exe" });
...

并且可执行文件运行,但它不会重定向到文件。如果有人能解释我做错了什么以及我应该怎么做,我将不胜感激。我感觉我需要在 execv() 之前重定向,但我不知道该怎么做。

提前致谢!

最佳答案

Shell 重定向(如 > file)由 shell 实现。通过使用 execve(),您可以绕过 shell;子进程将在 argv 中看到 "> temp.exe",并将尝试将其作为参数处理。

如果你想将输出重定向到一个文件,最简单的方法是通过在 fork 后打开文件并使用 dup2() 将其文件描述符移动到标准输出来自己实现重定向:

if (fork() == 0) {
int fd = open("temp.exe", O_CREAT | O_WRONLY, 0666);
if (fd < 0) { handle error... exit(255); }
dup2(fd, 1);
close(fd);
execv(exe, ...);
}

关于C - 重定向子进程的IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55479605/

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