weixin_58887243 2022-02-24 21:01 采纳率: 33.3%
浏览 22
已结题

无名管道的文件描述符关闭与标准输入输出

int main(void)
{
pid_t pid;
int fd[2];
char buf[100];

        //创建无名管道
        if(pipe(fd) < 0){
            perror("pipe");
            exit(1);
        }

        //创建子进程
        if((pid = fork()) < 0){
            perror("fork");
            exit(1);
        }else if(!pid){  //子进程向管道中写字符串
            while(1){
                bzero(buf,sizeof(buf));
                printf("请输入一个字符串:");
                fgets(buf,sizeof(buf),stdin);
                buf[strlen(buf)-1] = '\0';
                if(write(fd[1],buf,strlen(buf)) < 0){
                    perror("write");
                    exit(1);
                }
                if(!strncmp(buf,"quit",4))
                    break;
            }
            exit(0);
        }else{  //父进程从管道读数据,并打印到屏幕
            while(1){
                bzero(buf,sizeof(buf));
                if(read(fd[0],buf,sizeof(buf)) < 0){
                    perror("read");
                    exit(1);
                }
                if(!strncmp(buf,"quit",4))
                    break;
                printf("parent:%s\n",buf);
            }
            exit(0);
        }

        return 0;
    }

int main(void)
{
pid_t pid;
int fd[2];

if(pipe(fd)<0){
    perror("pipe");
    exit(1);
}

if((pid = fork())<0){
    perror("fork");
    exit(1);
}else if(!pid){
    close(fd[0]);
    dup2(fd[1],STDOUT_FILENO);
    execlp("ls","ls","-l",NULL);
    exit(0);
    
}else{
    close(fd[1]);
    dup2(fd[0],STDIN_FILENO);
    execlp("grep","grep","ls_w.c",NULL);
    exit(0);
    
}    
return 0;

}

第一个为什么不用关闭文件描述符?
第二个的dup2(fd[1],STDOUT_FILENO),写是输出,为什么不是输入

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月4日
    • 创建了问题 2月24日

    悬赏问题

    • ¥15 oracle数据库查询语句问题
    • ¥15 有没有c++绘制算法的佬们吗救孩一下
    • ¥15 android 蓝牙闪退
    • ¥15 绝缘子污秽comsol仿真参数
    • ¥15 Fatal error in Process MEMORY
    • ¥15 labelme生成的json有乱码?
    • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
    • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
    • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
    • ¥45 求17位带符号原码乘法器verilog代码