如果可能,如何使用execvp执行以下命令:
“ ls | tee〜/ outputfile.txt”
我试图运行以下代码,但收到此消息:execvp()意外出现:没有此类文件或目录 我不确定造成此问题的原因, 我无法执行此命令,因为这是串联命令?
#include <unistd.h> // execvp()
#include <stdio.h> // perror()
#include <stdlib.h> // EXIT_SUCCESS, EXIT_FAILURE
int main(void) {
char *const cmd[] = {"ls | tee ~/outputfile.txt", NULL};
execvp(cmd[0], cmd);
perror("Return from execvp() not expected");
exit(EXIT_FAILURE);
}
在最底下,要将命令“ ls”的输出写入我代码中的文件中。
提前谢谢!
答案 0 :(得分:1)
您不能像这样使用execvp(或任何exec *函数族)。 首先,第一个参数必须是可执行文件的路径。 我怀疑你有一个'ls | tee〜/ outputfile.txt”可执行文件放在计算机上的某个位置。 您可能有“ ls”或“ tee”,但没有“ ls | tee〜/ outputfile.txt'。
其次:exec *函数系列不能自然地进行管道传递(“ |”部分):您必须自己完成。
一个例子如下:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *const cmd[] = {"ls", "/home", NULL};
execvp(cmd[0], cmd);
perror("Return from execvp() not expected");
exit(EXIT_FAILURE);
}
这将在“ / home”中执行ls。 您可以将它传递给另一个执行程序:this可以极大地帮助您。
如果您只想在不考虑安全性的情况下执行命令行,则可以使用“ system”