专栏首页嵌入式智能硬件Linux进程间的通信

Linux进程间的通信

进程间的通信有管道、信号、消息队列、信号量、共享内存、套接字等。

一、管道通信

管道通信方式分为无名管道和有名管道,无名通道可用于有亲缘关系进程间的通信,有名通道克服了管道没有名字的限制。

管道具有以下特点:

1.管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立两个管道。

2.只能由于父子进程或者兄弟进程之间

3.单独过程一种独立的文件系统

4.数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在 管道缓冲区的末尾,并且每次都是从缓冲区头部读出数据。

相关函数

mkfifo、popen、read、write、fork

表头文件

#include<unistd.h>

定义函数

int pipe(int filedes[2])

函数说明

pipe()会建立管道,并将文件描述由参数fileds数组返回。filedes[0]为管道的读取端,filedes[1]则为管道的写入端。

返回值

若成功则返回0,否则返回-1;,错误原因在errno中

错误代码

EMFILE:进程已用文件描述符最大量 ENFILE:系统已无文件描述符可用 EFAULT:参数filedes数组地址不合法

  • EMFILE:进程已用文件描述符最大量
  • ENFILE:系统已无文件描述符可用
  • EFAULT:参数filedes数组地址不合法
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int filedes[2];
	char buffer[80];
	
	pipe(filedes);
	if(fork()>0)
	{
		/*父进程*/
		char s[] = "hello!\n";
		write(filedes[1],s,sizeof(s));
	}
	else
	{
		/*子进程*/
		read(filedes[0],buffer,80);
		printf("%s",buffer);
	}	
}

读写无名管道

二、信号量

信号量是一个计数器,可以用来控制多个进程对共享资源的访问,常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,在任一时刻只能有一个执行线程访问代码的临界区域,临界区域是指执行数据更新的代码需要独占式的执行,而信号量则可以提供这种访问机制,让临界区同一事件只有一个线程在访问。

三、消息队列

消息队列(message queue)

消息队列是由消息的链表,存放在内核中并有消息队列标识符的标识。克服了信号量传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

四、信号

信号是一种比较复杂的通信方式,用来通知接收进程某个事件已经发生。

五、

共享内存(shared memory)

映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。是最快的IPC(进程间通信)方式,是针对其他进程间通信方式运行效率低而专门设计的,往往与信号量配合使用,实现进程间的同步和通信。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 音频系统噪声源分析及排除方法

      在录音扩声或音频传输过程中噪声是具有一定频率的纹波电压通过电源线路窜入音频设备的供电回路,普遍存在又非常令人头痛和不易解决。通常组成音频设备的设备越多或信号...

    心跳包
  • shell程序设计

    linux中,每个进程都有三个特殊的文件描述指针:标准输入(文件描述指针为0),标准输出(文件描述指针为1),标准错误输出(文件描述指针为2)。

    心跳包
  • linux常见面试题

    Linux是一种基于UNIX的操作系统,最初是由Linus Torvalds引入的。它基于Linux内核,可以运行在由Intel,MIPS,HP,IBM,SPA...

    心跳包
  • Shell 脚本实现并发多进程 了解一下~

    从事Linux主机建设和运维的同事们在工作中应该经常会遇到批量修改配置信息或部署应用环境的需求,需要根据需求依次登录目标主机执行一些命令或脚本,使用shell脚...

    用户6543014
  • 一个比较扯淡的跨域问题

    2018-08-27更新: 使用cookie前强烈建议先看下MDN的这篇基础文章 创建cookie可以配置的选项 Expires,Secure,HttpOn...

    mafeifan
  • pytorch中autograd以及hook函数详解

    pytorch中的Autograd mechanics(自动求梯度机制)是实现前向以及后向反馈运算极为重要的一环,pytorch官方专门针对这个机制进行了一个版...

    OLDPAN
  • pytorch中autograd以及hook函数详解

    有些公式为图片,如果这个页面加载不出来,请看这里:https://oldpan.me/archives/pytorch-autograd-hook

    OLDPAN
  • 看到一个运动类小程序,有感而发

    话说,花叔所在的团队里有个小伙子叫小苏,这家伙在小程序出现前,就一直在研究小程序,“王者荣耀赛事小程序”的最初预研demo就是这家伙做的,这家伙对小程序的API...

    花叔
  • 移动端重构实战系列3——各种等分

    ”本系列教程为实战教程,是本人移动端重构经验及思想的一次总结,也是对sandal及sheral UI的一次全方位剖析,首发在imweb和w3cplus两大站点及...

    IMWeb前端团队
  • 移动端重构实战系列3——各种等分

    本文作者:IMWeb 结一 原文出处:IMWeb社区 未经同意,禁止转载 ”本系列教程为实战教程,是本人移动端重构经验及思想的一次总结,也是对sand...

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券