如果可能的话,如何使用 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”的输出写入我的代码中的文件中。
提前谢谢您!
最佳答案
您不能像这样使用 execvp (或任何 exec* 函数系列)。 首先,第一个参数必须是可执行文件的路径。 我怀疑你有一个 'ls | tee ~/outputfile.txt' 可执行文件位于计算机上的某个位置。 您可能有“ls”或“tee”,但没有“ls |” tee ~/outputfile.txt'。
其次:exec* 函数系列无法进行 native 管道传输(“|”部分):您必须自己完成。
示例如下:
#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 操作。 由您决定是否将其通过管道传输到另一个 execve 中:this可以给你很大的帮助。
如果您只想执行命令行而不考虑安全性,则可以使用“system ”
关于c - 使用 execvp 执行串联命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521966/