首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中关闭管道、dup2、文件描述符?

在C中关闭管道、dup2、文件描述符?
EN

Stack Overflow用户
提问于 2012-02-02 12:24:55
回答 1查看 4.1K关注 0票数 1

我正在运行一个做管道的程序。我想运行的命令是ls | cat。

代码语言:javascript
复制
int cmd(char** w, int* pipe, int action){
... some code up here
...
int fd;
if(child_pid == 0) {
    if (pipe != 0) {

        if (action == 0){
            fd = dup2(pipe[0], STDIN_FILENO);
            close(pipe[0]);
            close(pipe[1]);
            //close(fd);
        }
        else if (action == 1){
            fd = dup2(pipe[1], STDOUT_FILENO);
            close(pipe[0]);
            close(pipe[1]);
            //close(fd);
        }


    }

    execvp(w[0], w);



    printf("Unknown command\n");
    exit(0);
  }
... some code down here

当我运行代码时,命令ls | cat运行得很好,只是cat没有结束(即管道没有关闭,只是在那里等待不做任何事情)。我想这是因为我没有关闭流或其他东西,但我对C/IO还不够熟悉,无法确定。我这样做对吗?

运行此函数的代码如下所示

代码语言:javascript
复制
int fd[2];
int p = pipe(fd);
cmd(w, fd, 1);
cmd(w, fd, 0);

编辑:你是对的,致命错误,我在论点上打错了字。

thxs,看起来我只需要关闭父目录中的pipe1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 12:32:29

在两次cmd调用之后,父进程还需要关闭管道的两端。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9107156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档