相关疑难解决方法(0)

在C中,如何在进行execvp()或类似调用时将stdin/stdout/stderr重定向到文件?

我有以下代码:

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()调用的输入/输出仍然是控制台,而不是文件.显然,我做错了什么,做这件事的正确方法是什么?

c unix linux exec io-redirection

22
推荐指数
2
解决办法
8万
查看次数

调用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()更好的方法?

谢谢!

c fork exec io-redirection

4
推荐指数
2
解决办法
6616
查看次数

标签 统计

c ×2

exec ×2

io-redirection ×2

fork ×1

linux ×1

unix ×1