4进程间通信.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4进程间通信.ppt

了解进程和线程基本概念 掌握进程编程 掌握线程编程 第4章 进程间通信 预习检查 进程间通信的方法有? 信号、文件锁、管道、FIFO、信号量、共享内存、消息队列 哪一种方法最有效,最快? 共享内存 哪些方法是system V IPC? 信号量、共享内存、消息队列 必须要求是亲属进程间才能通信的方法是? 管道 本章目标 了解Unix/Linux进程间通信的方式 掌握和熟练运用常见的IPC方式 信号 管道和FIFO 信号量 消息队列 共享内存 本章结构 信号 进程间通信 管道/FIFO 信号响应、处理与发送 信号机制 管道的概念 管道的创建与读写 FIFO 消息队列的创建与操作 信号量的创建与操作 信号量综合示例 综合示例msgtool 共享内存的创建与操作 综合示例shmtool 信号量 消息队列 共享内存 信号 信号(signal)机制是Linux系统中最为古老的进程之间的通信机制 信号事件的发生有两个来源: 硬件来源,比如我们按下了键盘或者其它硬件故障; 软件来源,最常用发送信号的系统函数是kill(), raise(), alarm()和setitimer()等函数,软件来源还包括一些非法运算等操作。 进程对信号的处理 进程可以通过三种方式来响应和处理一个信号: 忽略信号 捕捉信号 执行缺省操作 信号处理函数的安装 #includesignal.h void( *signal(int sig, void( *func)(int)))(int); 如果func不是函数指针,必须是下列两个宏: SIG_IGN:忽略信号。 SIG_DEF:采用系统默认的方式处理信号,执行缺省操作。 返回值:返回先前的信号处理函数指针,如果有错误则返回-1。 要安装的信号值 信号的处理 函数 信号的发送 除了内核和超级用户,并不是每个进程都可以向其他的进程发送信号。 一般的进程只能向具有相同uid和gid的进程发送信号,或向相同进程组中的其他进程发送信号。 常用的发送信号的函数有kill()、raise ()、alarm()、setitimer()、abort() 等。 信号的发送 kill()函数:给指定的进程发送某一个信号 #include sys/types.h #include signal.h int kill(pid_t pid, int sig); 返回值:成功为0;失败返回-1。 接收信号的进程id 要发送的信号值 信号的发送 raise()函数:给进程本身发送一个信号 #include signal.h int raise(int sig); 相当于kill(getpid(),sig); 返回值:成功为0;失败返回-1。 要发送的信号值 信号的发送 alarm()函数:是一个简单定时器,专为SIGALRM信号设计 #include unistd.h unsigned int alarm(unsigned int seconds); 在指定的seconds秒之后,给进程本身发生一个SIGALRM信号 定时器的定时时间 管道 管道是针对于本地计算机的两个进程之间的通信而设计的通信方法,管道建立后,实际获得两个文件描述符:一个用于读取而另外一个用于写入。 管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立起两个管道。 只能用于父子进程或者兄弟进程之间(具有亲缘关心的进程)。 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是单独构成一种文件系统,并且只存在于内存中。 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 管道的创建 系统调用pipe()用于创建一个管道 int pipe(int filedes[2]); 建立管道: filedes[0]: 为pipe的读出端 filedes[1]: 为pipe的写入端 两个文件描述符数组。 文件描述符 FIFO FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中 在文件系统中是一个有名字的管道 任何进程都可以打开 进程间无需关联 FIFO的创建 #include sys/types.h #include sys/stat.h int mkfifo(const char *pathname, mode_t mode); 文件路径名 文件权限 信号量 System IPC中,对于每一个新建的信号

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档