Перенаправление вывода execvp в файл на C
Я не знаю, что я делаю неправильно... но вот фрагмент кода, который выполняется:
if (fork() == 0)
{
// child
int fd = open(fileName, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
dup2(fd, 1); // make stdout go to file
execvp("ls","ls");
close(fd);
exit(0);
}
if(wait(&status) == -1)
{
printf("ERROR REDIRECT\n");
}
fileName
создается, но внутри ничего нет. Что я делаю не так?
2 ответа
Решение
Я предполагаю, что execvp не работает, но так как вы не обрабатываете ошибки, вы не видите его.
Попробуй это:
char *const args[] = {"ls", NULL};
execvp(args[0], args);
/* If this is reached execvp failed. */
perror("execvp");
В качестве альтернативы вы можете использовать составные литералы:
execvp("ls", (char *[]){"ls", NULL});
Вторая идея: попытаться запустить вещи нормально, без перенаправления и посмотреть, как это работает.
Закрыть fd перед execvp. потому что код после execvp никогда не запускается, если execvp не удается.