在 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 作为解决方案:#include #include #include
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;
}
但是,这也没有给我想要的结果。这写着“你好!” 到文件,但它也会覆盖已经写入文件的所有其他内容。我怎么能保证'你好!将被写入文件的END?