Linux学习笔记——管道PIPE
管道:当从一个进程连接数据流到另一个进程时,使用术语管道(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的更多相关文章
- linux 学习笔记 管道 pipe ls cp mv
如ls |less -MN 含义把ls结果输出到less [ls] ==管道== [more] ls命令 ls -a 展示隐藏的文件 <隐藏文件一般以. 开始> ls -t 以时间戳排 ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- deepin linux学习笔记
目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...
- Linux 学习笔记之超详细基础linux命令 Part 12
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 11---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 3
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 2----------------- ...
- 91 Testing Linux学习笔记
91 Testing Linux学习笔记... 学习地址:91Testing 的Linux教程=====================学习网址:http://www.91testing.net/ar ...
- (转)Linux最常用指令及快捷键 Linux学习笔记
Linux最常用指令及快捷键 Linux学习笔记 原文:http://blog.csdn.net/yanghongche/article/details/50827478 [摘自 鸟叔的私房菜]--转 ...
- Linux学习笔记(七) 查询系统
1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...
- linux学习笔记2-linux的常用命令
第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...
随机推荐
- ReetrantLock架构源码 --- One
以下是绅士通过processon画的一个比较简单的架构,模板模式理清楚确实需要一点点时间 Doug Lea牛ban- .- 最近在复习整理知识点,这上面的一些关键方法addWaiter();acqui ...
- webx入门
- VMnet1、VMnet8到底是什么?
当我们安装VMware Workstation后,在宿主机(物理电脑)上会多出两个网卡,VMNet1.VMNet8,在虚拟机设置里会多出一个配置 VMNet0. vmnet1和vmnet8是两个虚拟网 ...
- 2019-7-19 包、logging模块、hashlib(加密模块)、openpyxl模块、深浅拷贝
一.包 什么是包: 它是一系列模块文件的结合体,表示形式就是一个文件夹.该文件内部通常会有一个__init__.py文件,包的本质还是一个模块,可以被调用,调包就相当于与调用__init__.py文件 ...
- 「UR#5」怎样更有力气
「UR#5」怎样更有力气 解题思路 考虑没有限制的情况,一定是把操作离线下来,按照边权从小到达做.可以发现,如果没有限制,完全图是多余的,直接拿树边进行合并就可以了.我们要做这么一件事情,把每个点属于 ...
- BZOJ3514 / Codechef GERALD07 Chef and Graph Queries LCT、主席树
传送门--BZOJ 传送门--VJ 考虑使用LCT维护时间最大生成树,那么对于第\(i\)条边,其加入时可能会删去一条边.记\(pre_i\)表示删去的边的编号,如果不存在则\(pre_i = 0\) ...
- WPF 的命令的自动刷新时机——当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因
原文:WPF 的命令的自动刷新时机--当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因 在 WPF 中,你可以使用 Command="{Binding Walt ...
- 在ASP.NET MVC中加载部分视图的方法及差别
在视图里有多种方法可以加载部分视图,包括Partial() .Action().RenderPartial().RenderAction().RenderPage()方法.下面说明一下这些方法的差别. ...
- MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- 【转载】C#中List集合使用Min()方法查找到最小值
在C#的List集合操作中,有时候需要查找到List集合中的最小值,此时可以使用List集合的扩展方法Min方法,Min方法有2种形式,一种是不带任何参数的形式,适用于一些值类型变量的List集合,另 ...