【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 下进程间通信方式都有哪几种?简单加以说明。

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。    # 有名管道 (named pipe) : ...

Linux进程间通信的几种方式总结-概述

进程通信的目的 数据传输  一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 共享数据  多个进程想要操作共享数据,一个进程对共享数据 通知事  一个进程需...

Linux进程间通信(IPC)的几种方式

linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面...

linux 进程间通信的几种方式

进程间通讯进程间通信就是不同进程之间传播或交换信息,进程的用户空间是互相独立的,进程之间可以利用系统空间交换信息。 管道(pipe) 管道是一种半双工的通信方式,数据只能单向流动。如果要进行双工通信...

linux 进程间通信的几种方式

一 管道技术    1)概念    历史上是半双工的,只能单向流动,目前有系统提供全双工管道    linux上全双工管道由unix域套接字实现    只能在具有公共祖先的进程间使用    ...

linux学习之十七---进程间通信的几种方式

进程间通信 进程的地址空间是各自独立的,因此进程之间交互数据必须采用专门的通信机制。特别在大型的应用系统中,往往需要多个进程相互协作共同完成一个任务,这就需要使用进程间的通信编程技术。 linux...

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

linux上面的IPC大多都是从UNIX上面继承而来。        最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信号灯、S...

linux系统的进程间通信有哪几种方式

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 linux编程之pipe()函数 有名管道 (named...

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

什么是进程间通信广义上讲,进程间通信(Inter-Process Communication, IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交换。从上面的定义可以得出两点: ...
  • pcsxk
  • pcsxk
  • 2015-10-08 11:32
  • 1760
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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