进程间通信IPC的原理:


常见的进程间通信方式有:

  1. 管道(使用最简单)
  2. 信号(开销最小)
  3. 共享映射区(无血缘关系)
  4. 本地套接字(最稳定)

二、管道的特质与基本用法

内核借助环形队列机制,使用内核缓冲区实现,血缘关系间进程可用

创建并打开管道:int pipe(int pipefd[2]);参数分别是读写,pipefd[0]是读端,pipefd[1]是写端,成功返回0,失败返回-1
例子:创建管道时父子进程的读写通道都打开,那么fork子进程后,子进程也拥有父进程的读写通道,如图

但是管道数据是单向流动的,因此一端读的话一端写,我们就将父进程的读端关闭,将子进程的写端关闭:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<unistd.h>
#include<pthread.h>void sys_err(const char *str)
{perror(str);exit(1);
}
int main(int argc, char *argv[])
{int ret;//接收创建管道的函数的返回值int fd[2];char *str = "hello pipe"char buf[1024];ret = pipe(fd);if(ret == -1)sys_err("pipe error");pid = fork();//创建子进程if(pid>0)//父进程{close(fd[0]);//父进程关闭读端write(fd[1],str, strlen(str));//父进程往管道中写数据close(fd[1]);}else(pid == 0)//子进程{close(fd[1]);//子进程关闭写端//子进程去读ret = read(fd[0], buf, sizeof(buf));write(STDOUT_FILENO, buf, ret);close(fd[0]);}
}

三、管道的读写行为

Linux——进程间通信的常见方法(管道、信号、共享映射区、本地套接字)、管道的了解与简单用法相关推荐

  1. Linux网络编程——Unix本地套接字

    概述 今天给大家讲解网络编程中的一个内容--Unix 本地套接字. 发现很多人不知道或者不太了解 Unix 本地套接字这个概念,这也难怪,socket API 原本就是为多台主机之间网络通信设计的,并 ...

  2. linux日志查看常见方法

    linux日志查看常见方法 作为一个常年的码农,常年与日志打交道,我自己常用的日志就有各种linux访问日志,php错误日志,nginx访问日志,mysql慢日志- 那么日志是如何查看与分析呢?这里的 ...

  3. Linux套接字编程之sockaddr与sockaddr_in网络套接字,sockaddr_un进程间通信本地套接字

    sockaddr struct sockaddr { unsigned  short  sa_family;     /* address family, AF_xxx */ char  sa_dat ...

  4. Liunx操作-Record20—MMAP共享映射区相关的操作

    目录 MMP共享映射的原理 创建映射区函数 释放映射区函数 示例说明 mmap九问 mmap实现父子进程通信 匿名映射 用mmap支持无血缘关系进程通信 关于"mmap_MAP_SHARED ...

  5. linux编程本地套接字

    linux编程本地套接字 本地套接字是 IPC,也就是本地进程间通信的一种实现方式.除了本地套接字以外,其它技术,诸如管道.共享消息队列等也是进程间通信的常用方法,但因为本地套接字开发便捷,接受度高, ...

  6. 本地套接字示例[来源:Advanced Linux Programming]

    本地套接字示例[来源:Advanced Linux Programming] 要通过套接字连接同一台主机上的进程,可以使用符号常量 PF_LOCAL 和 PF_UNIX所代表的本地命名空间.它们被称为 ...

  7. linux 本地套接字 路径,linux本地套接字

    本地套接字实现的是同一主机的不同进程间的通信,且建立的通信是双向的通信.socket本地通信与网络通信使用的是统一套接口,只是地址结构中的参数不同. 1.socket流程 (1)创建socket 创建 ...

  8. Linux本地套接字通信

    1. 本地套接字 socket API原本为网络通信而设计,后来在其基础上扩展出本地套接字机制用于本地进程间通信. 本地套接字为全双工通信方式. 2. 本地套接字的使用 2.1 本地套接字通信步骤 ( ...

  9. C++学习:第六章Linux高级编程 - (七)信号、sigqueue、sigaction、IPC、管道、匿名管道

    回顾: 1. 信号的作用 2. 理解信号: 软中断 可靠与不可靠信号 kill -l 3. 信号发送与注册 kill/raise alarm setitimer signal 4. 信号的屏蔽 sig ...

最新文章

  1. arduino雨滴传感器原理_Arduino酸度计(PH计)
  2. Codeforces Round #721 (Div. 2)
  3. Spark Windows
  4. aix 的c库为什么都是静态库_Linux静态库生成指南
  5. Multisim、protel和proteus的区别
  6. 总线全称_一篇文章讲透I2C总线协议
  7. 11.求二元查找树的镜像[MirrorOfBST]
  8. Linux/UNIX系统编程手册(英文版)pdf
  9. 如何开发和维能hold住全场的软件
  10. Windows版JMeter下载安装
  11. [zz]世界第一只计算机bug和Debug
  12. 宏碁e5-572g重装linux,Acer-E5-572G笔记本U盘装原版win10系统教程
  13. 计算流体力学CFD入门教程介绍
  14. 容联七陌×惠州燃气丨用服务之光,点燃美好生活
  15. coredump 瘦身风云
  16. cpu功耗排行_目前较低功耗的intel系cpu求推荐?
  17. Ubuntu 下yuma源码安装
  18. python中文分词,生成标签云,生成指定形状图片标签云
  19. 【线性代数及其应用】05 - 正交性和最小二乘
  20. 电脑启动出现0x0000007B的解决方案

热门文章

  1. unity人物旋转移动代码_求教,人物控制,视角随鼠标移动,且绕角色旋转。
  2. python 爱心背景_表白神器!如何使用 Python 绘制爱心墙!
  3. 【AndroidFramework】ATV9遥控器红外模式下,机顶盒在假待机阶段会响应遥控器语音键...
  4. MVSNet depthfusion配置流程
  5. 利用Python编写一个高斯正反算程序
  6. linux qc管理,QC管理选项卡
  7. 使用Python制作跳舞小熊的动态二维
  8. 3-7 基于场景测试
  9. HTC Android 移动网络设置(转)
  10. HTML最新标准HTML5小结