【问题标题】:Fork/Dup2/Exec not working with mkstempFork/Dup2/Exec 不能与 mkstemp 一起使用
【发布时间】:2012-11-27 17:20:36
【问题描述】:

为什么在下面的程序中字数会输出0 0 0?

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

【问题讨论】:

  • 您应该对您的fork 调用进行错误检查,而您没有调用free

标签: c exec fork stdio


【解决方案1】:

尝试使用 lseek(0, 0, SEEK_SET) 在 dup2() 之后倒回标准输入。在您的代码中, wc 将尝试从文件末尾读取,显然没有任何字节要读取。

【讨论】:

    猜你喜欢
    • 2014-06-20
    • 2013-11-18
    • 2016-02-07
    • 1970-01-01
    • 2011-06-26
    • 2016-06-16
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多