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 !\n");
    }else if(pid>0)
    {
        //关闭写文件描述符
        close(pipefds[1]);
        dup2(pipefds[0],STDIN_FILENO);
        close(pipefds[0]);
        //wc可以从终端读取数据,此时终端就是管道
        execlp("wc","wc","-w",NULL);
        printf("execlp() failed !\n");
    }
    return 0;
}
时间: 2024-09-29 19:42:31

Linux 管道的实现模型的相关文章

linux总线设备驱动模型

本篇文章通过平台总线设备模型为例,讲解总线设备驱动模型: platform_device_register的作用: 1.把device放入bus的device链表 2.从bus的driver链表中取出每一个driver,用bus的match函数判断driver能否支持这个device 3.若可以支持,调用driver的probe函数 platform_driver_register的作用: 1.将driver放入bus的driver链表 2.从bus的device链表中取出每一个device,用

Linux网络I/O模型简介

一.I/O基础入门 java1.4之前的早期版本,java对I/O的支持并不完善,开发人员在开发高性能I/O程序的时候,会面临一些巨大的挑战和困难,主要问题如下. 1.没用数据缓冲区,I/O性能存在问题: 2.没有C或者C++中的Channel概念,只有输入和输出流: 3.同步阻塞式I/O通信(BIO),通常会导致通信线程被长时间阻塞: 4.支持字符集有限,硬件可移植性不好. 二.Linux网络I/O模型简介 Linux的内核讲所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供

Linux五种IO模型

Linux五种IO模型 转载:http://blog.csdn.net/jay900323/article/details/18141217 Linux五种IO模型性能分析 目录(?)[-] 概念理解 Linux下的五种IO模型 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动IO 异步IO模型 个IO模型的比较 selectpollepoll简介 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:

Linux管道及IO重定向小练习

1.统计/usr/bin目录下的文件个数 [[email protected] ~]# ls /usr/bin | wc -l 1306 [[email protected] ~]# 2.取出当前系统上所有用户的SHELL,要求,每种SHELL只显示一次,并且按顺序进行显示 [[email protected] ~]# cut -d: -f7 /etc/passwd | sort -u /bin/bash /bin/nologin /bin/sync /bin/tcsh /sbin/halt /

Windows五种IO模型性能分析和Linux五种IO模型性能分析

Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blog.csdn.net/jay900323/article/details/18140847 重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数.当使用重叠I/O模型时,可以选择使用不同的完成通知方式. 采用事件对象通知的重叠I/O模型是不可伸缩的,因为针对发出WSAWa

Linux 的 Socket IO 模型

前言 之前有看到用很幽默的方式讲解Windows的socket IO模型,借用这个故事,讲解下linux的socket IO模型: 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系. 他们的信会被邮递员投递到他们小区门口的收发室里.这和Socket模型非常类似. 下面就以老陈接收信件为例讲解linux的 Socket I/O模型. 一.同步阻塞模型 老陈的女儿第一次去外地工作,送走她之后,老陈非常的挂心她安全到达没有:于是老陈什么也不干,一直在小区门口收发室里等着她女儿的报平安的信

linux 管道--转

linux 管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别. 有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建. Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制.从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: ·      限制管道

[转载] Linux五种IO模型

转载:http://blog.csdn.net/jay900323/article/details/18141217 Linux五种IO模型性能分析 目录(?)[-] 概念理解 Linux下的五种IO模型 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动IO 异步IO模型 个IO模型的比较 selectpollepoll简介 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:      所谓同步

(转载) Linux五种IO模型

转载:http://blog.csdn.net/jay900323/article/details/18141217 Linux五种IO模型及分析 目录(?)[-] 概念理解 Linux下的五种IO模型 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动IO 异步IO模型 个IO模型的比较 selectpollepoll简介 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:      所谓同步,