9 进程间通信.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程通信—消息队列 int msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int flag) msqid:消息队列的队列ID; msgp:消息内容所在的缓冲区; msgsz:消息的大小; msgflg:控制消息队列满或者到达系统上限将发生的事情,例如:设置IPC_NOWAIT则消息不发送并返回-1;清除IPC_NOWAIT则发送进程挂起直到消息队列腾出空间后返回。 进程通信—消息队列 int msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz,long msgtyp, int flag) msqid:消息队列的引用标识符; msgp:接收到的消息将要存放的缓冲区; msgsz:消息的大小,不包含消息类型; msgtyp:期望接收的消息类型,一般取值0; msgflg:没有相应消息可供接收时应发生的事情,例如:IPC_NOWAIT。 进程通信—消息队列 int msgctl (int msqid, int cmd, struct msqid_ds *buf) msqid是消息队列的引用标识符; cmd是执行命令; buf是一个缓冲区。 cmd参数指定对于由msqid规定的队列要执行的命令: IPC_STAT 取此队列的msqid_ds结构,并将其存放在buf指向的结构中。 IPC_SET 按由buf指向的结构中的值,设置与此队列相关的结构中的下列四个字段: msg_perm.uid、msg_perm.gid、msg_perm;mode和msg_qbytes。 IPC_RMID 从系统中删除该消息队列以及仍在该队列上的所有数据。这种删除立即生效。仍在使用这一消息队列的其他进程在它们下一次试图对此队列进行操作时,将出错返回EIDRM。 消息队列举例 通过消息队列,实现数据接收、发送。 发送消息:msg2.c 接收消息:msg1.c 通过消息队列,实现聊天室 lucy.c peter.c 信号的检测与处理的过程如图所示。 其中①~⑤标出处理流程的顺序。 从图中可以看出,信号的检测是在系统空间中进行,而对信号的处理却是在用户空间中执行。 * #include “signal.h” Void * signal(int sig,void(*func)(int)):接收信号sig后,调用func函数 备注:处理函数形参必须整形,用于恢复信号原有功能。 * #include “sys/types.h” #include “signal.h” int kill(pid_t pid,int sig):把参数sig给定的信号发送给pid进程 #include “unistd.h” Int pause(void):挂起,直到信号到来。 * IPC:Interprocesses Communication 定义说明:“进程之间”泛指父子关系进程之间的IPC方法、没有父子关系进程间的IPC方法和不同机器上进程间IPC方法 注意:父子进程间可以通过命令传递参数,或子进程继承父进程变量等方式进行通信。 * * linux进程间通信(IPC)由以下几部分发展而来: 早期UNIX进程间通信、基于System V进程间通信、基于Socket进程间通信和POSIX进程间通信。 (1)UNIX进程间通信方式包括:管道、FIFO、信号。 (2)System V(ATT开发的一个UNIX操作系统版本)进程间通信方式包括:System V消息队列、System V信号灯、System V共享内存。 (3)POSIX(Portable Operation System Interface,一组操作系统规范)进程间通信包括:posix消息队列、posix信号灯、posix共享内存。 * 思考:能否仿照pipeHalf.c,图示pipeTotal.c的管道创建过程。 * 针对第二条阐述:任何关联的进程都必须共享一个相关的祖先进程。因为管道存在于系统内核之中,所以任何不在创建管道的进程的祖先进程之中的进程都将无法寻址它。 * 备注: 命令方式创建命名管道—mkfifo filename(ls -l注意理解fifo的各项含义,特别是文件访问权限受默认权限限制) 命令方式使用命名管道—echo “hello world” \tmp\filename cat \tmp\filename 命令方式删除命名管道—rm filename * 备注: 观察管道文件描述信息,其中访问权限受到umask的限制 * * 考虑: (1)如果读模式打开,写模式打开,但是管道内没有内容,则在没有设置O_NONBLOCK基础上

文档评论(0)

飞扬的岁月 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档