gpt4 book ai didi

c - 如何将重定向运算符 '>' 作为 execv 的参数传递?

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:58 25 4
gpt4 key购买 nike

在linux终端,我可以输入

echo hello! > /path/to/file

我以为我可以使用 execv 做同样的事情:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main(void){
char *write_cmd[] = { "echo", "hello!", ">", "/path/to/file", NULL};
if (fork() == 0){
execv("/bin/echo", write_cmd);
}
else{
sleep(1);
}
return 0;
}

但是,这段代码不会写“你好!”到文件,这是我想要它做的。有没有其他方法可以使用 execv 和 echo 来做到这一点?

编辑:我也尝试过使用 dup2 作为解决方案: #包括 #包括 #包括

int main(void){
char *write_cmd[] = { "echo", "hello!", NULL };
if (fork() == 0){
int tmpFd = open("/path/to/file", O_WRONLY);
dup2(tmpFd, 1);
execv("/bin/echo", write_cmd);
close(tmpFd);
exit(0);
}
else{
sleep(1);
}
return 0;
}

但是,这也没有给我想要的结果。这写“你好!”到文件,但它也会覆盖已经写入文件的所有其他内容。我怎么能保证“你好!”会被写入文件的末尾吗?

最佳答案

你可以,但只能是间接的。

> 重定向运算符由 shell 解释; /bin/echo 无法识别它,并将其视为要打印的另一个参数。

如果您希望 shell 执行重定向,您需要调用 /bin/sh 并将整个命令作为参数传递给它。

未经测试的代码如下:

char *write_cmd[] = { "/bin/sh", "-c", "echo hello! > /path/to/file", NULL };
// ...
execv("/bin/sh", write_cmd);

或者,更简单地说,您可以使用 system()

关于c - 如何将重定向运算符 '>' 作为 execv 的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28490290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com