管道:当从一个进程连接数据流到另一个进程时,使用术语管道(pipe)。
# include <unistd.h>

int pipe(int filedes[2]); //创建管道

pipe()说明:

返回值:0成功,-1出错。

如果调用成功,则进程此时由了两个额外的打开文件描述符,filedes[0]中的值是管道的读取端,而filedes[1]是管道的写入端。
#include<unistd.h>

#include<sys/types.h>

#include<errno.h>

#include<stdio.h>

#include<stdlib.h>
int main(){

int pipe_fd[2];

pid_t pid;

char buf_r[100];

char *p_wbuf;

int r_num;
    memset(buf_r,0,sizeof(buf_r));
    //创建管道

if(pipe(pipe_fd)<0){

printf("pipe create error/n");

return -1;

}
    if((pid=fork())==0){

//表示在子进程中

printf("/n");

//关闭管道写描述符,进行管道读操作

close(pipe_fd[1]);

sleep(2);

//管道描述符中读取

if((r_num=read(pipe_fd[0],buf_r,100))>0){

printf("%d numbers read from the pipe is %s/n",r_num,buf_r);

}

close(pipe_fd[0]);

exit(0);

}

else if(pid>0){

//表示在父进程中,父进程写

//关闭管道读描述符,进行管道写操作

close(pipe_fd[0]);

if(write(pipe_fd[1],"Hello",5)!=-1)

printf("parent write1 success!/n");

if(write(pipe_fd[1],"Pipe",5)!=1)

printf("parent write2 success!/n");

close(pipe_fd[1]);

sleep(3);

waitpid(pid,NULL,0);

exit(0);

}

}

管道读写注意事项: 1.必须在系统调用fork()中调用pipe(),否则子进程将不会继承文件描述符; 2.当使用半双工管道时,任何关联的进程都必须共享一个相关的祖先进程。

转载声明: 本文转自 http://hi.baidu.com/glowzrf/blog/item/2e3edd17ed23b8044b90a70e.html

======================================================================

扩展参考:

命名管道FIFO——Linux笔记

http://hi.baidu.com/glowzrf/blog/item/dcaf96fb28c941136d22eb9f.html

信号——Linux学习笔记

http://hi.baidu.com/glowzrf/blog/item/2828d6ce8a17d63cb700c8e9.html

守护进程——Linux学习笔记

http://hi.baidu.com/glowzrf/blog/item/35fd44949629781bd31b70d7.html

共享内存——Linux学习笔记

http://hi.baidu.com/glowzrf/blog/item/9a2e97e7e9f1272bb938208d.html

Linux学习笔记——管道PIPE的更多相关文章

  1. linux 学习笔记 管道 pipe ls cp mv

    如ls |less -MN 含义把ls结果输出到less [ls]  ==管道== [more] ls命令 ls -a  展示隐藏的文件 <隐藏文件一般以. 开始> ls -t 以时间戳排 ...

  2. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  3. deepin linux学习笔记

    目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...

  4. Linux 学习笔记之超详细基础linux命令 Part 12

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 11---------------- ...

  5. Linux 学习笔记之超详细基础linux命令 Part 3

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 2----------------- ...

  6. 91 Testing Linux学习笔记

    91 Testing Linux学习笔记... 学习地址:91Testing 的Linux教程=====================学习网址:http://www.91testing.net/ar ...

  7. (转)Linux最常用指令及快捷键 Linux学习笔记

    Linux最常用指令及快捷键 Linux学习笔记 原文:http://blog.csdn.net/yanghongche/article/details/50827478 [摘自 鸟叔的私房菜]--转 ...

  8. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

  9. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

随机推荐

  1. Java序列化的方式。

    0.前言 本文主要对几种常见Java序列化方式进行实现.包括Java原生以流的方法进行的序列化.Json序列化.FastJson序列化.Protobuff序列化. 1.Java原生序列化 Java原生 ...

  2. Delphi TButton.OnClick 匿名函数用法

    type TNotifyEventRef = reference to procedure(Sender: TObject); function AnonymousEvent(const Proc: ...

  3. AX 2012 Computed column IIF语句使用

    涉及Dynamics ax 行业已经好几年了,准备总结一些有用的处理方法供大家来参考 首先先介绍下Computed column技术,该技术是微软在AX2012版本中提供的新技术,可以让SQL语句在A ...

  4. SpringCloud整合sleuth,使用zipkin时不显示服务

    转载于:https://www.cnblogs.com/Dandwj/p/11179141.html 原文地址:https://blog.csdn.net/weixin_30416497/articl ...

  5. PTA A1017

    A1017 Queueing at Bank (25 分) 题目内容 Suppose a bank has K windows open for service. There is a yellow ...

  6. NEST 自定义分析器

    public void SetAnalysis() { if (!client.IndexExists("employee").Exists) { client.CreateInd ...

  7. 2019 乐逗游戏java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.乐逗游戏等公司offer,岗位是Java后端开发,因为发展原因最终选择去了乐逗游戏,入职一年时间了,也成为了面 ...

  8. Java之路---Day03

    2019-10-17-21:18:33 方法 定义格式: public static void 方法名称() { 方法体 } 完整格式: 修饰符  返回值类型  方法名称(参数类型  参数名称,... ...

  9. 自学Python编程的第五天(希望有IT大牛帮我看最下面的代码)----------来自苦逼的转行人

    2019-09-15-15:40:24 今天没有学知识,是一个一周总结,把这一周学的知识总结一遍,然后把做过的练习题再做一遍 看是否还会有再出现同样的错误,而且还可以知道有哪些知识点没有掌握好,可以把 ...

  10. 连续子数组的最大乘积及连续子数组的最大和(Java)

    1. 子数组的最大和 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.例如数组:arr[]={1, 2, 3, -2, ...