第4章_嵌入式Linux进程间通信
时间:2026-01-17
时间:2026-01-17
嵌入式Linux进程间通信
嵌入式应用程序设计第4章 嵌入式Linux进程间通信
嵌入式Linux进程间通信
课程安排: 课程安排: 第1章 搭建嵌入式Linux开发环境 第2章 嵌入式文件I/O编程 第3章 嵌入式Linux多任务编程 第4章 嵌入式 章 嵌入式Linux进程间通行 进程间通行 第5章 嵌入式Linux多线程编程 第6章 嵌入式Linux网络编程 第7章 Qt图形编程 第8章 嵌入式Linux设备驱动编程 第9章 Qt聊天项目设计2
嵌入式Linux进程间通信
本章课程: 本章课程: 4.1 Linux下进程间通信概述 4.2 管道通信 4.3 信号通信 4.4 信号量 4.5 共享内存 4.6 消息队列 4.7 实验内容 4.8 小结 4.9 思考与练习3
嵌入式Linux进程间通信
4.1 Linux下进程间通信概述继承Unix平台上进程通信手段 集合System V IPC(贝尔实验室)和socket的进程间通信机制 (BSD)的优势最初UNIX的进程间通信
System V 进程间通信
Socket进程间通信
Linux 进程间 通信
POSIX进程间通信
嵌入式Linux进程间通信
4.1 Linux下进程间通信概述常用的进程间通信机制管道及有名管道 信号 消息队列 共享内存 信号量 套接字
嵌入式Linux进程间通信
4.2 管道通信4.2.1 管道简介无名管道特点它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟 进程之间)。 它是一个半双工的通信模式,具有固定的读端和写端。 管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的 read()、write()等函数。但是它不是普通的文件,并不属于其他任何文件 系统,并且只存在于内存中
有名管道特点它可以使互不相关的两个进程实现彼此通信。 该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了 管道之后,两个进程就可以把它当作普通文件一样进行读写操作,使用 非常方便。 FIFO严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数 据,对它们的写则把数据添加到末尾,它们不支持如lseek()等文件定位 操作。
嵌入式Linux进程间通信
4.2 管道通信4.2.2 无名管道系统调用管道创建和关闭管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个 文件描述符fds[0]和fds[1],其中fds[0]固定用于读管道,而fd[1]固定用于 写管道,这样就构成了一个半双工的通道。
嵌入式Linux进程间通信
4.2管道通信4.2.2 无名管道系统调用pipe()创建管道可以通过调用pipe()来实现.
pipe()语法:
嵌入式Linux进程间通信
4.2管道通信4.2.2 无名管道系统调用父子进程管道的文件描述符对应关系
嵌入式Linux进程间通信
4.2管道通信4.2.2 无名管道系统调用管道读写注意点:只有在管道的读端存在时,向管道写入数据才有意义。否则,向管道写 入数据的进程将收到内核传来的SIGPIPE信号(通常为Broken pipe错误 )。 向管道写入数据时,Linux将不保证写入的原子性,管道缓冲区一有空 闲区域,写进程就会试图向管道写入数据。如果读进程不读取管道
缓冲 区中的数据,那么写操作将会一直阻塞。 父子进程在运行时,它们的先后次序并不能保证,因此,在为了保证父 子进程已经关闭了相应的文件描述符,可在两个进程中调用sleep()函数 ,当然这种调用不是很好的解决方法,在后面学到进程之间的同步与互 斥机制之后,请读者自行修改本小节的实例程序。
嵌入式Linux进程间通信
4.2管道通信4.2.3 标准流管道标准流管道函数说明与Linux的文件操作中有基于文件流的标准I/O操作一样,管道的操作也 支持基于文件流的模式。这种基于文件流的管道主要是用来创建一个连 接到另一个进程的管道,这里的“另一个进程”也就是一个可以进行一 定操作的可执行文件 。
嵌入式Linux进程间通信
4.2管道通信4.2.3 标准流管道popen函数格式:
pclose函数格式:
嵌入式Linux进程间通信
4.2管道通信4.2.3 有名管道(FIFO)通过mkfifo()创建有名管道 mkfifo()函数语法:
嵌入式Linux进程间通信
4.2 管道通信4.2.3 有名管道(FIFO)FIFO相关出错信息
嵌入式Linux进程间通信
4.2 管道通信4.2.3 有名管道(FIFO)FIFO读写对于读进程 若该管道是阻塞打开,且当前FIFO内没有数据,则对读进程而言将 一直阻塞到有数据写入。 若该管道是非阻塞打开,则不论FIFO内是否有数据,读进程都会立 即执行读操作。即如果FIFO内没有数据,则读函数将立刻返回0。 对于写进程 若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。 若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入 或者调用失败。
嵌入式Linux进程间通信
4.3 信号通信4.3.1 信号概述信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式 信号可以直接进行用户空间进程和内核进程之间的交互,内核进程 也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在 任何时候发给某一进程,而无需知道该进程的状态。 如果该进程当前并未处于执行态,则该信号就由内核保存起来,直 到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞, 则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程
…… 此处隐藏:313字,全部文档内容请下载后查看。喜欢就下载吧 ……