使用 execvp 创建一个文件

Create a file with execvp

我正在尝试 运行

echo "Hello world" > foo.txt

使用 execvp。

到目前为止,我有这个:

#include <unistd.h>

int main(void) {
  char *execArgs[] = { "echo", "Hello, World! > foo.txt", NULL };
  execvp("echo", execArgs);
  return 0;
}

这将打印出行 "Hello, World! > foo.txt", 而不是创建一个名为 foo.txt 的文件,其中包含文本 "Hello, World!"。

有人在 Stack overflow 上做了类似的事情,他们这样做了:

execlp( "/bin/sh", "/bin/sh", "-c", "cat file1.txt > redirected.txt", (char *)NULL );

但是当我把它改成

execlp( "echo", "echo", "echo Hello World > redirected.txt", (char *)NULL );

没有任何反应。

编辑:

这样做有效(谢谢,SometimesRight!)

execlp( "/bin/sh", "/bin/sh", "-c", "echo Hello, World! > redirected.txt", (char *)NULL );

execlp 运行它希望在 PATH 中找到的可执行文件。但是 echo 不是可执行文件,它是在 shell 命令解释器(例如 sh 或 bash.

的上下文中运行的命令

我收回:在Linux /bin 中有一个echo 可执行文件。但是,要使用“>”将其通过管道传输到标准输出,您需要 shell 的帮助,例如 'sh'.