zoukankan      html  css  js  c++  java
  • Linux 管道的实现模型

    //管道的实现
    //当前目录下实现命令"ls | wc -w"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <errno.h>
    
    int main()
    {
        int pipefds[2]={0};
        //创建匿名管道
        if(pipe(pipefds)==-1)
        {
            perror("pipe() err");
            return -1;
        }
        pid_t pid=fork();
        if(pid==-1)
        {
            perror("fork() err");
            return -1;
        }
        if(pid==0)
        {
            //子进程关闭读文件描述符
            close(pipefds[0]);
            //dup2()函数把匿名管道的读文件描述符赋值给STDIN_FILENO,而STDIN_FILENO原先指向的文件表被关闭
            //将ls命令的结果输出到管道中
            dup2(pipefds[1],STDOUT_FILENO);
            //close()只是关闭文件描述符引用 现在pipefds[1]指向的文件表同时被pipefds[1]和STDIN_FILENO引用
            //关闭pipefds[1],文件表还在
            close(pipefds[1]);
            execlp("ls","ls",NULL);
            printf("execlp() failed !
    ");
        }else if(pid>0)
        {
            //关闭写文件描述符
            close(pipefds[1]);
            dup2(pipefds[0],STDIN_FILENO);
            close(pipefds[0]);
            //wc可以从终端读取数据,此时终端就是管道
            execlp("wc","wc","-w",NULL);
            printf("execlp() failed !
    ");
        }
        return 0;
    }
  • 相关阅读:
    倒计时发送短信案例
    倒计时效果
    setInterval 定时器
    setTimeout定时器
    调整窗口大小事件
    window常见事件onload
    模拟京东快递单号查询
    模拟京东按键输入内容
    跟随鼠标的天使案例
    Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6218134.html
Copyright © 2011-2022 走看看