嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第4章 嵌入式Linux进程间通信.ppt

嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第4章 嵌入式Linux进程间通信.ppt

ID:50042061

大小:846.00 KB

页数:44页

时间:2020-03-08

嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第4章 嵌入式Linux进程间通信.ppt_第1页
嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第4章 嵌入式Linux进程间通信.ppt_第2页
嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第4章 嵌入式Linux进程间通信.ppt_第3页
嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第4章 嵌入式Linux进程间通信.ppt_第4页
嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第4章 嵌入式Linux进程间通信.ppt_第5页
资源描述:

《嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第4章 嵌入式Linux进程间通信.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、嵌入式应用程序设计第4章嵌入式Linux进程间通信第1章搭建嵌入式Linux开发环境第2章嵌入式文件I/O编程第3章嵌入式Linux多任务编程第4章嵌入式Linux进程间通行第5章嵌入式Linux多线程编程第6章嵌入式Linux网络编程第7章Qt图形编程第8章嵌入式Linux设备驱动编程第9章Qt聊天项目设计课程安排:24.1Linux下进程间通信概述4.2管道通信4.3信号通信4.4信号量4.5共享内存4.6消息队列4.7实验内容4.8小结4.9思考与练习本章课程:3继承Unix平台上进程通信手段集合Syste

2、mVIPC(贝尔实验室)和socket的进程间通信机制(BSD)的优势4.1Linux下进程间通信概述4常用的进程间通信机制管道及有名管道信号消息队列共享内存信号量套接字4.1Linux下进程间通信概述54.2.1管道简介无名管道特点它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)。它是一个半双工的通信模式,具有固定的读端和写端。管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read()、write()等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中

3、有名管道特点它可以使互不相关的两个进程实现彼此通信。该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作,使用非常方便。FIFO严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾,它们不支持如lseek()等文件定位操作。4.2管道通信64.2.2无名管道系统调用管道创建和关闭管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fds[0]和fds[1],其中fds[0]固定用于读管道

4、,而fd[1]固定用于写管道,这样就构成了一个半双工的通道。4.2管道通信74.2.2无名管道系统调用pipe()创建管道可以通过调用pipe()来实现.pipe()语法:4.2管道通信84.2.2无名管道系统调用父子进程管道的文件描述符对应关系4.2管道通信94.2.2无名管道系统调用管道读写注意点:只有在管道的读端存在时,向管道写入数据才有意义。否则,向管道写入数据的进程将收到内核传来的SIGPIPE信号(通常为Brokenpipe错误)。向管道写入数据时,Linux将不保证写入的原子性,管道缓冲区一有空闲区

5、域,写进程就会试图向管道写入数据。如果读进程不读取管道缓冲区中的数据,那么写操作将会一直阻塞。父子进程在运行时,它们的先后次序并不能保证,因此,在为了保证父子进程已经关闭了相应的文件描述符,可在两个进程中调用sleep()函数,当然这种调用不是很好的解决方法,在后面学到进程之间的同步与互斥机制之后,请读者自行修改本小节的实例程序。4.2管道通信104.2.3标准流管道标准流管道函数说明与Linux的文件操作中有基于文件流的标准I/O操作一样,管道的操作也支持基于文件流的模式。这种基于文件流的管道主要是用来创建一个

6、连接到另一个进程的管道,这里的“另一个进程”也就是一个可以进行一定操作的可执行文件。4.2管道通信114.2.3标准流管道popen函数格式:pclose函数格式:4.2管道通信124.2.3有名管道(FIFO)通过mkfifo()创建有名管道mkfifo()函数语法:4.2管道通信134.2.3有名管道(FIFO)FIFO相关出错信息4.2管道通信144.2.3有名管道(FIFO)FIFO读写对于读进程若该管道是阻塞打开,且当前FIFO内没有数据,则对读进程而言将一直阻塞到有数据写入。若该管道是非阻塞打开,则不

7、论FIFO内是否有数据,读进程都会立即执行读操作。即如果FIFO内没有数据,则读函数将立刻返回0。对于写进程若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。4.2管道通信154.3.1信号概述信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一进程,而无需知道该进程的状态。如果该进程当前并未处于执

8、行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程4.3信号通信164.3.1信号概述进程相应信号的方式忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略:SIGKILL及SIGSTOP。捕捉信号,定义信号处理函数,当信号发生时,执行相应的处理函数。执行缺省操作,Linu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。