我正在尝试从C程序中执行程序(在UNIX中)。
我已经获得了一个可执行文件(程序在执行期间需要输入字符串并将该输入写入另一个名为sample的文件),这个文件名为exec,我想在program.c中执行它,但是通过间接给出字符串输入。 / p>
为此我创建了一个文件如下:
% vim input
我在输入文件
中写了以下内容content
现在在program.c中,
#include<unistd.h>
int main()
{
const char* command = "./exec < input";
execvp(command, NULL);
return 0;
}
当我运行程序时,内容不会输入到示例文件中。
但是当我没有间接地运行时,即
const char* command = "./exec";
然后它可以工作,输入输入保存在样本文件中。
有人可以告诉我在间接语法中做错了什么。
感谢。
答案 0 :(得分:4)
您正在使用的语法应该由shell解释,如bash,csh,ksh等。
系统调用execvp
只需要可执行文件的路径和一些参数,不会在那里调用shell。
要以这种方式执行重定向,您必须在调用dup2(2)
之前使用execvp
系统调用:
int fd = open("input", O_RDONLY);
/* redirect standard input to the opened file */
dup2(fd, 0);
execvp("/path/to/exec", ...);
当然,您需要在实际程序中进行一些额外的错误检查。
答案 1 :(得分:1)
您无法使用execvp
进行重定向。使用system()
或开始与dup()
和朋友保持友好关系。你可能会谷歌'实现重定向'..你可能会发现很多关于shell(例如)如何处理这个问题的例子。
答案 2 :(得分:0)