无名管道的特点:

1.适用场景:只能用于具有亲缘关系的两个进程之间;
2.通信模式:半双工模式,具有固定的读端(0)和写端(1);
3.读写方式:用文件io,不支持lseek;
4.读阻塞:当管道中无数据时;
写阻塞:当管道中写满数据时;
5.管道大小:无名管道大小64k;
6.管道破裂:关闭读端,仍然想管道中写入数据时;
对管道进行写的进程会收到内核发来SIGPIPE的信号,可以捕获;

来,我们用无名管道先写一个回显程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>#define N 32int main(int argc, const char *argv[])
{int pipefd[2];int pid;if(pipe(pipefd) < 0){perror("pipe error");exit(1);}if( (pid = fork()) < 0){perror("fork error");exit(1);}else if(pid == 0){char buf[N];int ret;close(pipefd[0]);puts("im chd start");while(fgets(buf, N, stdin) != NULL){write(pipefd[1], buf, N);if(strncmp(buf, "quit", 4) == 0){break;}}puts("im chd end");exit(2);}else if(pid > 0){int chdstatus, out_pid, ret;char buf[N];close(pipefd[1]);puts("im farther start");//父进程在这里会阻塞,应为管道的特点中有一条“当管道中无数据时,会读阻塞”,//程序启动时,如果父进程现将占到系统资源执行到这里仍然会阻塞,因为管道中没//有数据。所以父进程要想执行,必须依赖于子进程向管道中写入数据;//但是如果是读取一个文件,文件为空,此时read等于0,则不会执行while循环;//在这里主要提一下管道无数据,会读阻塞;while(read(pipefd[0], buf, N) > 0){puts("im if");if(strncmp(buf, "quit", 4) == 0){exit(1);;}fputs(buf, stdout);}puts("im farther end");out_pid = waitpid(pid, &chdstatus, 0);printf("outpid = %d\n", out_pid);if(WIFEXITED(chdstatus)){printf("exit_num = %d\n", WEXITSTATUS(chdstatus));}exit(0);}return 0;
}

下面我们用无名管道来实现一个文件服务器的功能

进程学习:进程间通信(传统通信方式)1.无名管道相关推荐

  1. 进程间的通信IPC(无名管道和命名管道)

    进程间的通信IPC介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息. IPC的方式通常有管道(包括无名管道和命名管道).消息队列.信号量 ...

  2. linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道

    与"无名管道"不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如"/tmp/my_fifo",其对应到磁盘上的一个管道文件,如果我们用f ...

  3. 进程间通信方式(一)-- 无名管道、有名管道

    文章目录 1. 进程间通信方式分类 2. 进程间通信实现方式 3. 无名管道 3.1 概念 3.2 相关函数 读写规律 3.3 无名管道实现进程间通信 4. 有名管道 4.1 概念 4.2 创建有名管 ...

  4. 进程间的通信——无名管道

    进程间的通信--无名管道 宗旨:技术的学习是有限的,分享的精神是无限的. 一.进程间的通信 (1)同主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO).消息队列和共享内存.无名管道多用 ...

  5. 进程间通信之无名管道

    文章目录 前言 一.创建无名管道 二.尝试在无名管道中读取 1.引入库 2.验证无名管道的内容只能读一次 三.测试无名管道能写入多少个字节 四.测试两个进程是否能通信 五.父子进程通信案例 总结 前言 ...

  6. linux进程通信1:进程通信概述,管道通信原理(无名管道,有名管道),管道编程实战

    进程通信概述,管道通信原理(无名管道,有名管道),管道编程实战 1.进程间通信概述: 举例1: 你手机微信和别人手机微信通信 举例2: 如:父子进程wait 和 exit之间的通信 进程间通信(IPC ...

  7. Liunx系统编程篇—进程通信(二)无名管道(原理、创建、实战)命名管道(原理、创建、实战)

    一.无名管道 管道,通常指无名管道(之所以叫无名管道是因为,没有文件名),是 UNIX 系统IPC最古老的形式. 特点 (1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端. (2) ...

  8. linux系统调用创建无名管道,无名管道系统调用

    本文关键字: linux 管道通信,linux 进程通信方式,无名管道 1.管道创建与关闭说明 管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1],其中fd ...

  9. 进程间通信六种通信方式

    目录 一.管道 二.FIFO 三.消息队列 四.共享内存 五.信号 六.信号量 七.进程间通信方式总结: 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传 ...

  10. [国嵌攻略][080][无名管道通讯]

    通讯目的 1.数据传输 一个进程需要将数据发送给另外一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另外一个/组进程发送消息,通知它们发生了某事件. 4.进程控制 ...

最新文章

  1. 抖音、快手和直播行业的火爆究竟给了谁机会?
  2. YOLOv5发布第六个版本,支持一键适配OpenVINO/OpenCV DNN部署
  3. tc35i pdu message format
  4. 关于scanf 函数,你很少了解的“秘密”
  5. 图:活动现场双屏管理系统V3-多线程抽奖版软件,完美升级收工!历时3个月,艰辛坎坷...
  6. python逻辑运算符例子_python运算符-实战中常用的三个逻辑运算符使用实例
  7. .java中jar_java中的jar
  8. ZZULIOJ 1067: 有问题的里程表
  9. linux ac97声卡驱动下载,《声卡驱动》AC97声卡/创新/主板集成
  10. ISO/OSI七层网络参考模型、TCP/IP四层网络模型和教学五层网络模型
  11. Java 计算两个日期时间差(天数、时、分、秒、毫秒)
  12. Gerrit环境与代码Review实战
  13. 什么是React为什么使用React什么时候使用React
  14. 郑州共享美容院小程序开发如何操作?
  15. 有那些适合苹果手机用的蓝牙耳机?适合苹果手机用的蓝牙耳机推荐
  16. 【arcgis 批量将属性表批量导出成excel】
  17. cesium-视频融合
  18. 编写C语言程序 输出一个菱形
  19. 建立自己的手写笔画图案
  20. 业精于勤荒于嬉 行成于思毁于随

热门文章

  1. CDN和双线机房的区别
  2. 【原创】解决JT2Go二次开发提示license key无效问题
  3. PDF电子书如何一键添加书签
  4. 基于STM32U5片内GPDMA Burst传输应用示例
  5. 暨大 c语言复试 2015,暨南大学历年复试真题合集.pdf
  6. 苹果手机解压缩软件_360压缩大师360 推出的免费 macOS 解压缩软件
  7. 知识点滴 - 什么是当量
  8. SubString SAM+LCT
  9. MATLAB SIMULINK电力电子仿真
  10. 公钥加密技术ECC椭圆曲线加密算法原理