管道分为无名管道和有名管道两种管道,管道文件是建立在内存之上可以同时被两个进程访问的文件。

先来说说有名管道:
mkfifo函数创建有名管道,属于系统调用。

在linux操作系统中为实现下述功能,

先创建一个有名管道文件fifo。

再写出两个对管道文件进行操作的程序,一个只读,另外一个只写。

只读:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <fcntl.h>int main()
{
int fdr=open("./fifo",O_RDONLY);
assert(fdr != -1);printf("fdr=%d\n",fdr);while(1)
{char buff[128]={0};
int n=read(fdr,buff,127);
if(n==0)
{break;
}
printf(“buff=%s,n=%d\n”,buff,n);
}
close(fdr);
exit(0);
}

只写:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <fcntl.h>int main()
{int fdw=open("./fifo",O_WRONLY);
assert(fdw != -1);
printf("fdw=%d\n",fdw);
while(1)
{printf("intput:\n");char buff[128]={0};fgets(buff,128,stdin);if(strncmp(buff,"end",3)==0){break;}write(fdw,buff,strlen(buff)-1);
}
close(fdw);exit(0);
}

分别在不同的bush里面,在运行只写的里面写入字符,只读那边就会将写好的字符打印出来。

总结:1.管道为空,读read阻塞
2.管道为满,写write阻塞

关闭管道写端,读就返回为0,不再阻塞
关闭管道的读端,写端,写入数据时,会产生异常

**

##无名管道

**

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <fcntl.h>//使用无名管道要引用的头文件

//父子进程,父进程写入,子进程读取
int main()
{
int fd[2];//两个文件描述符
int res=pipe(fd);
assert(res != -1);

pid_t pid=fork();
assert(pid !=-1);if(pid==0){close(fd[1]);//关闭写端char buff[128]={0};read(fd[0],buff,127);printf("buff=%s\n",buff);close(fd[0]);//关闭读端}else{close(fd[0]);//关闭读端write(fd[1],"hello",5);close(fd[1]);//关闭写端}exit(0);}

有名管道和无名管道的区别?
有名管道可以在任意两个进程之间通讯,而无名管道只能在父子进程之间通迅。

写入管道的数据是在内存中还是磁盘中?
在内存中,无论有名无名。

管道的通讯是全双工还是半双工?
半双工。

Linux 管道文件相关推荐

  1. linux管道文件数量,Linux 下统计文件夹大小及文件数量

    [查看文件夹大小]# /lib 目录大小 du -sh /lib # /lib 子目录大小 du -sh /lib/* # 查看 /lib 目录下普通文件大小 find /lib -type f -p ...

  2. linux 管道文件上机总结,[转载]LINUX 管道 fifo 等总结

    Linux进程通信:命名管道FIFO小结 Linux下进程之间通信可以用命名管道FIFO完成.命名管道是一种特殊类型的文件,因为Linux中所有事物都是文件,它在文件系统中以文件名的形式存在. 在程序 ...

  3. linux中怎么创建管道文件,Linux  管道文件

    管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别.有名管道叫named ...

  4. linux管道文件的实现原理,管道(无名管道)通信机制原理和实现详解

    管道(pipe)允许两个进程进行通信,是早期 UNIX 系统最早使用的一种IPC 机制.管道为进程之间的相互通信提供了一种较为简单的方法,尽管也有一定的局限性. 在实现管道时,应该考虑以下四个问题: ...

  5. 【Android 逆向】Linux 文件分类 ( 普通文件 | 目录文件 | 链接文件 | 字符设备文件 | 管道文件 | 块设备文件 )

    文章目录 一.Linux 文件分类 1.普通文件 2.链接文件 3.字符设备文件 4.管道文件 5.块设备文件 一.Linux 文件分类 Linux 文件分类 : " - " 表示 ...

  6. 【Linux】管道文件(有名管道、无名管道)

    [Linux]管道文件(有名管道.无名管道) 多进程编程的目的就是为了同时完成多个任务. 例如:一个产品,一个软件,需要n个进程同时执行才能完成,而这些进程之间一定是有所联系的. 因此:多进程工作时, ...

  7. linux下的有名管道文件读写操作

    前言说明: 宿主主机系统:window 7 旗舰版 虚拟机:VMware 10.0.4 操作平台:Ubuntu 12.04 本文代码在个人电脑可以运行,不确保在其他平台可以正确运行 这两天在学进程通信 ...

  8. linux中怎么创建管道文件,linux创建管道命令

    FIFO管道是一种文件类型,在Linux上创建FIFO非常容易.那么具体使用到哪个命令呢?下面由学习啦小编为大家整理了linux创建管道的相关方法,希望对大家有帮助! 一.FIFO管道说明 FIFO, ...

  9. linux 查看 管道文件,linux 查看文件和管道命令

    cat.tail.head.tee.这些命令的语法基本上相同的:命令名 [选项] [文件],而且您可以在管道中使用这些命令.这些命令的功能都是根据特定的条件选择文件内容进行打印. cat 工具会将文件 ...

最新文章

  1. 第十六届全国大学生智能车竞赛百度智慧交通竞赛成绩
  2. Android IllegalStateException: The specified child already has a parent问题解决办法
  3. maven优化-repositories,dependencyManagement,pluginManagement
  4. element的滚动去掉横向_textarea去掉滚动条 textarea横向或纵向滚动条的去掉方法
  5. mysql 临时表 heap_mysql优化: 内存表和临时表
  6. sql 创建用户脚本
  7. c语言 格式转换函数,C语言中的格式转换函数.doc
  8. jpa oracle 传参int类型判空_企业级Java开发之图解JPA核心构件
  9. 2018福建省考c语言成绩查询,福建省公务员考试录用网成绩查询系统:2019福建省考分数查询入口...
  10. tensorflow.python.framework.tensor_shape.is_fully_defined()
  11. Linux 驱动之内核定时器
  12. 老男孩Linux运维第41期20170827开班第一周学习重点记录
  13. react.js 表单验证-登录框
  14. 云南计算机类的事业单位,2014云南省昭通事业单位招聘考试计算机专业知识历年真.doc...
  15. 46-Java-RabbitMQ
  16. 计算机英语写作题范文,2018年6月英语四级考试写作范文:人与电脑
  17. 多少道防线才能挡住顶尖黑客?
  18. 联发科毫米波雷达解决方案芯片MT2706(Autus R10)
  19. 卖计算机配件的二手平台,电脑哪些配件适合买二手,哪些最好入新?
  20. 基于BCNN的汽车车型识别研究

热门文章

  1. Solr云(SolrCloud)
  2. 贝佐斯聘请SpaceX公司前高管 负责亚马逊卫星互联网项目
  3. PCA降维工作原理及代码案例实现
  4. “捉迷藏”也能学习?OpenAI用其教会AI团队合作!
  5. C语言练习题-顺序与选择
  6. PTA 整除光棍 (20 分) Java (BigInteger简单解题)
  7. 5G连接器存在怎样的魔力?
  8. v-show和v-if有什么区别和共同之处?使用的场景分别是什么?
  9. 根据接口文档书写接口,并在前端调用接口返回显示出数据(加下载)
  10. python自定义异常和主动抛出异常(raise)