3

何が間違っているのかわかりません...しかし、実行されているコードのスニペットは次のとおりです。

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作成されますが、中には何もありません。何が間違っているのですか?

4

2 に答える 2

6

私の推測では、execvpは機能しませんが、エラーを処理しないため、表示されません。

これを試して:

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

/* If this is reached execvp failed. */

perror("execvp");

または、複合リテラルを使用することもできます。

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

2番目のアイデア:リダイレクトせずに通常どおりに実行して、どのように機能するかを確認します。

于 2012-01-30T20:18:45.883 に答える
1

execvpの前にfdを閉じます。execvpが失敗しない限り、execvpの後のコードは実行されないためです。

于 2016-11-15T06:47:40.257 に答える