В Linux терминал, я могу ввестиКак передать оператор перенаправления '>' в качестве аргумента для execv?
echo hello! > /path/to/file
Я думал, что я мог бы сделать то же самое с помощью execv: «Hello!»
#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?
Edit: Я попытался с помощью 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 файла?
Оболочка интерпретирует его как оператора перенаправления. Когда вы запускаете новую программу напрямую, вместо того чтобы просить оболочку делать это от вашего имени, вы можете вручную выполнить перенаправление. Посмотрите на 'dup2'. – Deduplicator
Спасибо за ответ. Я пробовал использовать dup2. Однако проблема заключается в том, что я хочу иметь возможность всегда писать в END файла. Когда я использую dup2, я могу только перезаписать то, что уже записано в файл. – Jay
Ваш эхо привет! >/path/to/file' перезаписывает файл. Если вы всегда хотите добавить, пожалуйста, обновите вопрос, чтобы это было ясно. Оболочка использует '>>' для добавления в файл. Если вы используете то, что я предложил, вы можете передать '>>', а не '>' в оболочку. –