我有以下代码:
pid_t pid = fork();
if (pid == -1)
{
// ...
}
else if (pid == 0)
{
stdin = someopenfile;
stdout = someotherfile;
stderr = somethirdopenfile;
execvp(args[0], args);
// handle error ...
}
else
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
问题是,execvp()调用的输入/输出仍然是控制台,而不是文件.显然,我做错了什么,做这件事的正确方法是什么?
我一直在实现一个使用execvp()执行给定命令的小程序.不使用重定向时它工作正常,但是当我运行如下命令时:
cat file1.txt > redirected.txt
Run Code Online (Sandbox Code Playgroud)
cat输出以下错误消息并失败:
cat: >: No such file or directory
cat: redirected.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我已经做了一些挖掘,我开始认为也许execvp()不允许进行重定向,因为它不在shell中运行.这是否意味着我必须在重定向发生时手动选择并在fork/exec代码中使用管道来解决这个限制?有没有比使用execvp()更好的方法?
谢谢!