进程通信与课程设计1 .ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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.h int 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)

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档