c - 使用 execvp 执行串联命令

标签 c linux

如果可能的话,如何使用 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/

相关文章:

c++ - 如何为手机构建 slider 拼图软件

c - gdb 错误 "Program exited normally"

c - 我怎样才能在pam中获取客户端ip

c - 将参数从shell脚本传递到c程序

c++ - 运行测试时如何考虑依赖关系?

c++ - size_t 类型变量的跨平台格式字符串?

linux - 按目录顺序查找命令列表结果

c - 在 C 中设置线程优先级

Linux:如何使用终端中的最后一个命令以不同的时间格式显示日期?

linux - Wordpress 无法在 CentOS 6.2 上运行