0

次のプログラムで単語数が000を出力するのはなぜですか?

int main(int argc, char **argv) {
    pid_t pid = fork();
    const char *data = "THIS IS MY DATA.";
if(pid == 0) {
    // Child Process
    char *tmpname = malloc(15);
    strcpy(tmpname, "/tmp/datXXXXXX");
    int f = mkstemp(tmpname);
    //int f = open("tmpfile", O_RDWR | O_CREAT, S_IRWXU);
    if(f == -1) {
        perror("");
        return;
    }
    int written = write(f, data, strlen(data));
    dup2(f, STDIN_FILENO);
    close(f);
    char *wcargs[5] = {"wc", NULL};
    execvp("wc", wcargs);
    fprintf(stderr, "ERROR");
}
return 1;
}
4

1 に答える 1

1

lseek(0、0、SEEK_SET)を使用して、dup2()の後にstdinを巻き戻してみてください。あなたのコードでは、wcはファイルの最後から読み込もうとしますが、明らかに読み取るバイトはありません。

于 2012-11-27T17:24:17.927 に答える