- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程通信与课程设计1
进程间通信程序设计1;进程间通讯概述;
Linux进程间通信(IPC)由以下几部分发展而来:1)UNIX进程间通信2)基于System V进程间通信3)POSIX进程间通信;POSIX(Portable Operating System Interface)表示可移植操作系统接口。电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。然而,POSIX 并不局限于 UNIX,许多其它的操作系统,例如 DEC OpenVMS 和 Microsoft Windows,都支持 POSIX 标准。
?
System V,也被称为 ATT System V,是Unix操作系统众多版本中的一支。;
在Linux使用的进程间通信方式包括:1)管道(pipe)和有名管道(FIFO)2)信号(signal)3)消息队列4)共享内存5)信号量6)套接字(socket); 管道;
数据被一个进程读出后,将被从管道中删除,其它读进程将不能再读到这些数据。管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞。同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞。
; 管道创建;int pipe(int filedis[2]);当一个管道建立时,它会创建两个文件描述符:filedis[0] 用于读管道, filedis[1] 用于写管道,如图所示:
; 管道关闭; 管道读写;
pipe_rw.c 程序演示
;memset的原型:void memset(void *s, int ch, unsigned n);
功能是将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。
;命名管道(FIFO);#include sys/types.h#include sys/stat.hint mkfifo(const char * pathname, mode_t mode)vpathname:FIFO文件名vmode:属性(见文件操作章节)一旦创建了一个FIFO,就可用open打开它,一般的文件访问函数(close、read、write等)都可用于FIFO。
;当使用open()函数打开FIFO时,非阻塞标志(O_NONBLOCK)将对以后的读写产生如下影响:1)没有使用O_NONBLOCK:访问要求无法满足时进程将阻塞。如试图读取空的FIFO,将导致进程阻塞。2)使用O_NONBLOCK:访问要求无法满足时不阻塞,立刻出错返回,errno是ENXIO。
要演示命名管道,需要两个不相关的进程,即两个c程序文件,分别为fifo_read和fifo_write文件。
;
file_read.c
file_write.c演示; 信号通信; 信号类型;下面是几种常见的信号:SIGHUP:从终端上发出的结束信号SIGINT:来自键盘的中断信号(Ctrl-C)SIGKILL:该信号结束接收信号的进程SIGTERM:kill 命令发出的信号SIGCHLD:标识子进程停止或结束的信号SIGSTOP:来自键盘(Ctrl-Z)或调试程序的停止执行信号
;1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联. 2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出 3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号. 4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号
5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用. 6) SIGABRT 程序自己发现错误并调用abort时产生. 7) SIGIOT 在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样. 8)SIGBUS 非法地址, 包括内存地址对齐(alignment)
您可能关注的文档
最近下载
- 最新最完整的的厂房设施确认实施方案.pdf
- 工程造价专业大学生职业生涯规划书.docx VIP
- 档案管理10号令解读(网).ppt
- 重庆《轻质隔墙条板应用技术标准》DBJ50T 338-2019.pdf
- (冀人版)科学五年级上册全册知识点.docx
- 电子工业版信息科技七年级上册3-1 “互联网+”在学习中的应用 教案.pdf VIP
- 2024-2025学年高中生物 第4章 种群和群落 第4节 群落的演替说课稿 新人教版必修3.docx
- 10 数学史问题与一元一次方程(含答案析) -七年级数学之专攻一元一次方程各种类型题的解法(人教版).docx
- 锅炉本体焊接作业指导书.pdf
- 钣金加工:折弯工艺手册.doc VIP
文档评论(0)