перенаправление вывода execvp в файл на C - PullRequest
2 голосов
/ 31 января 2012

Я не знаю, что я делаю неправильно ... но вот фрагмент кода, который выполняется:

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 ]

4 голосов
/ 31 января 2012

Я предполагаю, что execvp не работает, но, поскольку вы не обрабатываете ошибки, вы его не видите.

Попробуйте это:

char *const args[] = {"ls", NULL};
execvp(args[0], args);

/* If this is reached execvp failed. */

perror("execvp");

В качестве альтернативы вы можете использовать составные литералы:

execvp("ls", (char *[]){"ls", NULL});

Вторая идея: попытайтесь запустить вещи нормально, без перенаправления и посмотрите, как это работает.

0 голосов
/ 15 ноября 2016

закрыть fd перед execvp. потому что код после execvp никогда не запускается, пока execvp не завершится с ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...