首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dup2的问题

dup2的问题
EN

Stack Overflow用户
提问于 2010-09-04 13:22:15
回答 1查看 681关注 0票数 1

在将Ben的答案包含在代码中之后,它似乎起作用了

原题:

我试图使用dup2:

  1. 将"ls -al“的输出作为输入传递给"grep foo",
  2. 的输出变成"grep bar”的输入,
  3. 最终输出到stdout。

最后的输出是(空白),文件"in“是(空白)&文件"out”的输出为"ls -al“。

知道会发生什么吗?

代码语言:javascript
复制
int main()
{
    pid_t pid;
    int i;
    int inFileDes,outFileDes;   
    inFileDes=open("in",O_RDWR | O_CREAT,S_IRUSR | S_IWUSR); 
    outFileDes=open("out",O_RDWR | O_CREAT,S_IRUSR | S_IWUSR);  
    for(i=0;i<3;i++)
    {   
        if((pid=fork())==0)
        {
            switch(i)
            {
                case 0:
                dup2(outFileDes,1);
                execl("/bin/ls","ls","-al",0);
                break;
                case 1:
                                                  // originally:
                dup2(outFileDes,0);   // dup2(outFileDes,1);  
                dup2(inFileDes,1);    // dup2(inFileDes,0);

                execl("/bin/grep","grep","foo",0);   //lines having foo
                break;
                case 2:
                dup2(inFileDes,0);
                execl("/bin/grep","grep","bar",0);  //lines having foo & bar
                break;
            }
            exit(-1);  //in error   
        }
        waitpid(pid,NULL,0);
    }
    close(inFileDes);
    close(outFileDes);
    return(0);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-04 13:29:16

您的open调用将创建一个空文件"in“,而没有任何程序会写入该文件,因此这是预期的。因为grep的两个实例都是从空文件中读取的,所以它们的输出也是空的。

您真正想要的是使用pipe函数获取一对句柄,它被写成一个程序并在下一个程序中读取。您需要调用它两次,因为您在子进程之间有两组连接。

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

https://stackoverflow.com/questions/3642453

复制
相关文章

相似问题

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