【Linux】进程间通信的几种方式(1)

原创 2016年08月29日 10:16:05
进程间通信(IPC,InterProcessCommunication)
进程设立之初是为了私有系统资源,通信是为了两个不同进程能够同时看到公共的资源。
本质:让不同进程能够都看到同一份系统资源。只要A更改数据,B也能够看到。(借助内核,A将数据拷贝到内核上的缓冲区,B从内核缓冲区中读取)内核即操作系统。
子进程更改数据是自己的,可以看到数据的变化,但是父进程就不行,可能会触发写时拷贝;
进程间通信方式:匿名管道、命名管道、消息队列、信号量、共享内存、信号、套接字
1、匿名管道--pipe
1.1 管道调用函数pipe:
int pipe(int pipefd[2]);
pipefd[0]---读端 pipefd[1]---写端;
pipe函数调用成功返回0,失败返回-1
调用:man 2  pipe(只用于父子间通信);父进程的文件描述表是可以进行继承的。
1.2 管道特点:
(1)管道依赖于文件系统,
(2)管道只允许父子进程或者有血缘关系的进程间通信,《匿名管道》
(3)管道只允许单向数据通信, 若要双向通信必须再设置一个管道。
(4)管道提供面向字节流数据传输符,
(5)当进程结束时,管道会被系统回收。
1.3 pipe的程序代码及运行结果
ssize_t read(int fd, void *buf, size_t count);从fd向buf中读数据。
ssize_t write(int fd, const void *buf, size_t count);将buf中的数据写到fd中。



运行结果:

1.4 使用管道需要注意的四种情况:<将上述程序改写验证>
1)如果写端都关闭了,这时有进程从管道读端read数据。那么管道中剩余数据被读取后,再次read会返回0,就像读到文件末尾一样。
                       子进程write-10次,而父进程read-20次。结果只是read了10次

2)如果写端没关闭,进程也没有向管道中写数据,这时有进程从管道读端读、read数据。那么管道中剩余的数据都被读取后,再次read会阻塞,直到管道中有数据可读了才读取数据并返回。

3)如果读端都关闭了,这时有进程向管道的写端write数据。那么该进程会收到信号SIGPIPE,通常会导致进程异常终止。 

4)如果读端没关闭,进程也没有从管道中读数据,这时有进程向管道写端write数据。那么在管道被写满时再次write会阻塞,直到管道中有空位置了才写数据并返回。
2、命名管道
FIFO不同于管道之处在于它提供一个路径名与之关联。命名管道是一个设备文件。
int mkfifo(const char *path,mode_t mode);参数---路径,模式即存取权限,文件创建类型
使用命名管道时,必须先调用open()将其打开。同时用读写方式(O_RDWR)打开,则一定不会导致阻塞。否则,可能会阻塞。
fifo读端:


fifo写端:

Makefile:


剩下的几种通信方式见下篇:【Linux】进程间通信的几种方式(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux c==几种进程间通信方式的特点对比

linux上面的IPC大多都是从UNIX上面继承而来。  最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信号灯、System...
  • qq_31108501
  • qq_31108501
  • 2016年11月29日 20:17
  • 552

linux下的几种进程间通信方式的特点

linux上面的IPC大多都是从UNIX上面继承而来。         最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信...
  • qq_35212671
  • qq_35212671
  • 2016年11月24日 22:16
  • 866

Android 进阶13:几种进程通信方式的对比总结

不花时间打基础,你将会花更多时间解决那些不必要的问题。 读完本文你将了解: RPC 是什么 IDL 是什么 IPC 是什么 Android 几种进程通信方式 如何选择这几种通信方式 ThanksRPC...
  • u011240877
  • u011240877
  • 2017年06月05日 01:16
  • 4793

用户进程间通信主要哪几种方式?

(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,...
  • derek_yi
  • derek_yi
  • 2014年05月02日 21:53
  • 1695

进程间的五种通信方式介绍

进程间通信(IPC)介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。 IPC的方式通常有管道(包括无名管道和命名管...
  • wh_sjc
  • wh_sjc
  • 2017年04月20日 18:09
  • 725

理解几种常见的进程间通信方式

什么是进程间通信广义上讲,进程间通信(Inter-Process Communication, IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交换。从上面的定义可以得出两点: ...
  • pcsxk
  • pcsxk
  • 2015年10月08日 11:32
  • 2736

Linux进程间的通信方式和原理

进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。 进程通信的概念 进程用户空间是...
  • c15522627353
  • c15522627353
  • 2016年10月30日 17:05
  • 3832

【进程间通信】Android 进程间通信的几种实现方式

一、整体结构下面将逐一介绍4种通讯方式二、4种通讯方式1、ActivityAndroid内置了许多可供其他程序跨进程访问的Activity,比如跳至打电话页面(指定Action,uri跨进程访问) ...
  • Tomasyb
  • Tomasyb
  • 2017年06月06日 14:32
  • 434

linux进程间通信方式及比较

进程间的通信方式:    1.管道(pipe)及有名管道(named pipe):      管道可用于具有亲缘关系进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程...
  • nyist327
  • nyist327
  • 2014年12月06日 17:00
  • 1725

Android中进程间通信的几种方式

大家都知道,安卓中可以进行进程间的通信的方法主要有aidl,此外,还有broadcast,contentProvider等方式也可以进行进程间的信息或数据的传递,现在总结一下这几种方式的特点: b...
  • liqinruier
  • liqinruier
  • 2015年12月18日 13:16
  • 3121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Linux】进程间通信的几种方式(1)
举报原因:
原因补充:

(最多只允许输入30个字)