首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dup和dup2命令

dup和dup2命令
EN

Stack Overflow用户
提问于 2012-10-19 00:41:27
回答 1查看 1.5K关注 0票数 1

我要做的是把ls命令的输出放在一个文件中,然后使用grep命令读取该文件,并将其存储在一个新文件中,然后根据该文件上的内容,在终端上打印一些内容。

因此,有以下输出重定向:

1)从标准输出到称为oioioi.txt的文件(对于ls命令)

2)从oioioi.txt到grep.txt (用于grep命令)

3)从grep.txt返回终端

下面是我的代码:

代码语言:javascript
复制
#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>
#include<errno.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
        //if(!fork())
                //execl("/bin/grep","grep","input","oioioi.txt",0);
        FILE *fp1,*fp2;
        int fd,fd2;
        fp1=fopen("oioioi.txt","w+");
        fp2=fopen("grep.txt","w+");
        fd=fileno(fp1);
        fd2=fileno(fp2);
        char filename[40],id[40],marks[40],filename2[40];
        scanf("%s %s %s",filename,id,marks);
        char *execarg2[]={"ls",0};
        dup2(fd,1); //1st redirection
        //close(1);
        if(!fork())
        {
                execv("/bin/ls",execarg2);
        }
        sleep(1);
        wait(NULL);
        //dup(fd2);
        close(fd);
        dup(1);
        dup2(fd2,1); //2nd redirection
        if(!fork())
        {
                //sleep(1);
                execl("/bin/grep","grep",filename,"oioioi.txt",0);
        }
        sleep(1);
        wait(NULL);
        close(fd2);
        dup2(1,fd2); //3rd one which is the incorrect one
        fscanf(fp2,"%s",filename2);
                printf("%s",filename2);
        if(strcmp(filename2,filename)==0)
                printf("FILE FOUND");

        return(0);
}

我相信第三个是不正确的。然而,我对前两个也不是很确定。如果你们能看一下我的代码,告诉我哪里出错了,或者给我一个使用dup进行以下重定向的例子,我真的会非常感激

EN

回答 1

Stack Overflow用户

发布于 2012-10-19 02:11:10

问题开始于您的第一个dup调用:dup(fd, 1);。在这一行中,您将丢失到终端的标准输出。如果你想秘密地保留对它的引用,你应该提前dup(STDOUT_FILENO);

因此,对printf的后续调用实际上将被重定向到fd2,而不是stdout的原始fd (1)。

这里可能还有一些其他的问题,但这就是我所能理解的(请参阅我对这个问题的评论)。

注:

dup2的手册页声明,如果需要,它将关闭新的fd (第二个参数),使close

代码语言:javascript
复制
close(fd2);
dup(1, fd2);

多余的。

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

https://stackoverflow.com/questions/12959562

复制
相关文章

相似问题

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