2012-11-27 32 views
0

为什么在以下程序中字数输出0 0 0?fork/Dup2/Exec不适用于mkstemp

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; 
} 
+0

你应该对你的'fork'调用进行错误检查,并且你没有调用'free'。 – squiguy

回答

1

尝试在使用lseek(0,0,SEEK_SET)的dup2()之后倒退stdin。在你的代码中,wc将试图从文件尾部读取,显然不会有任何字节需要读取。

相关问题