//管道的实现
//当前目录下实现命令"ls | wc -w"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h> int main()
{
int pipefds[]={};
//创建匿名管道
if(pipe(pipefds)==-)
{
perror("pipe() err");
return -;
}
pid_t pid=fork();
if(pid==-)
{
perror("fork() err");
return -;
}
if(pid==)
{
//子进程关闭读文件描述符
close(pipefds[]);
//dup2()函数把匿名管道的读文件描述符赋值给STDIN_FILENO,而STDIN_FILENO原先指向的文件表被关闭
//将ls命令的结果输出到管道中
dup2(pipefds[],STDOUT_FILENO);
//close()只是关闭文件描述符引用 现在pipefds[1]指向的文件表同时被pipefds[1]和STDIN_FILENO引用
//关闭pipefds[1],文件表还在
close(pipefds[]);
execlp("ls","ls",NULL);
printf("execlp() failed !\n");
}else if(pid>)
{
//关闭写文件描述符
close(pipefds[]);
dup2(pipefds[],STDIN_FILENO);
close(pipefds[]);
//wc可以从终端读取数据,此时终端就是管道
execlp("wc","wc","-w",NULL);
printf("execlp() failed !\n");
}
return ;
}
Linux 管道的实现模型的更多相关文章
-
linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
-
Linux管道的实现机制
7.1.1 Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制.从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: ...
-
linux 管道--转
linux 管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别. ...
-
[转载] Linux五种IO模型
转载:http://blog.csdn.net/jay900323/article/details/18141217 Linux五种IO模型性能分析 目录(?)[-] 概念理解 Lin ...
-
网络通信 -->; Linux 五种IO模型
Linux 五种IO模型 聊聊Linux 五种IO模型
-
Linux和进程内存模型
一.Linux和进程内存模型 jvm是一个进程的身份运行在linux系统上,了解linux和进程的内存关系,是理解jvm和Linux内存关系的基础. 硬件.系统.进程三个层面的内存之间的概要关系 1. ...
-
Linux五种IO模型(同步 阻塞概念)
Linux五种IO模型 同步和异步 这两个概念与消息的通知机制有关. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.比如,调用readfrom系统调用时,必须等待IO操 ...
-
Linux管道思想
1.Linux管道 {{book | upper |lower | capfirst}} 含义:就是把前一个命令的结果当成后一个命令的输入.然后在下一个管道中输出满足条件的数据,如此继续数据的流向运动 ...
-
Windows五种IO模型性能分析和Linux五种IO模型性能分析
Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...
随机推荐
-
Android如何自定义dialog
; window.setAttributes(lp); // set the confirm button if (positiveButtonClickListener != null) { ((B ...
-
ZYNQ fsbl阶段的调试方法
以下是从安富利工程师的技术支持的邮件中摘抄的,在此再次对他们表示感谢. 在我们面对客户单板的时候,fsbl阶段的调试多少会有些问题,在这个过程中怎么快速定位客户的问题,并将有效的信息反馈给希望能帮助到 ...
-
macbook 重装win7
若是第一次已经成功好了,并且把第一次的安装U盘WININSTALL内容保存完好的前提下, win7要重新安装. 先进入Boot Camp移除Windows,备份好你的WIN系统的重要文件. 把第一次的 ...
-
HoloLens开发手记 - Unity之Recommended settings 推荐设置
Unity提供了大量的设置选项来满足全平台的配置,对于HoloLens,Unity可以通过切换一些特定的设置来启用HoloLens特定的行为. Holographic splash screen 闪屏 ...
-
wpf textblock 会覆盖 button里面字体样式的解决方法 还有button的style覆盖。。datepicker里面的按钮的style
.(button使用contont写的时候) 当.button使用 <button.content><textBlock/></button.content>依然会 ...
-
Sublime 不自动打开上次未关闭的文件 设置方法
{ "font_size": 17, "hot_exit": false, "remember_open_files": false, &q ...
-
安卓 Input Events(输入事件)
在安卓中,有不止一种方法从你的应用截取用户交互事件.在你的用户界面中考虑事件,途径就是从用户界面中的一个指定的view对象中捕获事件.该view提供了这样做的方法. 在你用来组成你布局的不同的view ...
-
【SQL】SQL2012 导入导出报错,未在计算机上注册...
导出时报错: 如图: 解决方法:下载插件: 下载地址:http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463 ...
-
javascript string对象的属性与方法
一 创建string对象 new string('string'); 更直接的定义方法是var str = 'string'; 二 string属性 1.constructor 2.lenght 字符 ...
-
QPen
Help on class QPen in module PyQt5.QtGui: class QPen(sip.simplewrapper) | QPen() | QPen(Qt.PenStyl ...