Linux——进程间通信的常见方法(管道、信号、共享映射区、本地套接字)、管道的了解与简单用法
进程间通信IPC的原理:
常见的进程间通信方式有:
- 管道(使用最简单)
- 信号(开销最小)
- 共享映射区(无血缘关系)
- 本地套接字(最稳定)
二、管道的特质与基本用法
内核借助环形队列机制,使用内核缓冲区实现,血缘关系间进程可用
创建并打开管道: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——进程间通信的常见方法(管道、信号、共享映射区、本地套接字)、管道的了解与简单用法相关推荐
- Linux网络编程——Unix本地套接字
概述 今天给大家讲解网络编程中的一个内容--Unix 本地套接字. 发现很多人不知道或者不太了解 Unix 本地套接字这个概念,这也难怪,socket API 原本就是为多台主机之间网络通信设计的,并 ...
- linux日志查看常见方法
linux日志查看常见方法 作为一个常年的码农,常年与日志打交道,我自己常用的日志就有各种linux访问日志,php错误日志,nginx访问日志,mysql慢日志- 那么日志是如何查看与分析呢?这里的 ...
- Linux套接字编程之sockaddr与sockaddr_in网络套接字,sockaddr_un进程间通信本地套接字
sockaddr struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_dat ...
- Liunx操作-Record20—MMAP共享映射区相关的操作
目录 MMP共享映射的原理 创建映射区函数 释放映射区函数 示例说明 mmap九问 mmap实现父子进程通信 匿名映射 用mmap支持无血缘关系进程通信 关于"mmap_MAP_SHARED ...
- linux编程本地套接字
linux编程本地套接字 本地套接字是 IPC,也就是本地进程间通信的一种实现方式.除了本地套接字以外,其它技术,诸如管道.共享消息队列等也是进程间通信的常用方法,但因为本地套接字开发便捷,接受度高, ...
- 本地套接字示例[来源:Advanced Linux Programming]
本地套接字示例[来源:Advanced Linux Programming] 要通过套接字连接同一台主机上的进程,可以使用符号常量 PF_LOCAL 和 PF_UNIX所代表的本地命名空间.它们被称为 ...
- linux 本地套接字 路径,linux本地套接字
本地套接字实现的是同一主机的不同进程间的通信,且建立的通信是双向的通信.socket本地通信与网络通信使用的是统一套接口,只是地址结构中的参数不同. 1.socket流程 (1)创建socket 创建 ...
- Linux本地套接字通信
1. 本地套接字 socket API原本为网络通信而设计,后来在其基础上扩展出本地套接字机制用于本地进程间通信. 本地套接字为全双工通信方式. 2. 本地套接字的使用 2.1 本地套接字通信步骤 ( ...
- C++学习:第六章Linux高级编程 - (七)信号、sigqueue、sigaction、IPC、管道、匿名管道
回顾: 1. 信号的作用 2. 理解信号: 软中断 可靠与不可靠信号 kill -l 3. 信号发送与注册 kill/raise alarm setitimer signal 4. 信号的屏蔽 sig ...
最新文章
- arduino雨滴传感器原理_Arduino酸度计(PH计)
- Codeforces Round #721 (Div. 2)
- Spark Windows
- aix 的c库为什么都是静态库_Linux静态库生成指南
- Multisim、protel和proteus的区别
- 总线全称_一篇文章讲透I2C总线协议
- 11.求二元查找树的镜像[MirrorOfBST]
- Linux/UNIX系统编程手册(英文版)pdf
- 如何开发和维能hold住全场的软件
- Windows版JMeter下载安装
- [zz]世界第一只计算机bug和Debug
- 宏碁e5-572g重装linux,Acer-E5-572G笔记本U盘装原版win10系统教程
- 计算流体力学CFD入门教程介绍
- 容联七陌×惠州燃气丨用服务之光,点燃美好生活
- coredump 瘦身风云
- cpu功耗排行_目前较低功耗的intel系cpu求推荐?
- Ubuntu 下yuma源码安装
- python中文分词,生成标签云,生成指定形状图片标签云
- 【线性代数及其应用】05 - 正交性和最小二乘
- 电脑启动出现0x0000007B的解决方案