(精选)网络应用程序设计(方敏 西电版)第5章 进程间通信及实现方法课件.pptVIP

(精选)网络应用程序设计(方敏 西电版)第5章 进程间通信及实现方法课件.ppt

  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文档。上传文档
查看更多
演示文稿演讲PPT学习教学课件医学文件教学培训课件

#define MAX_PRINTERS 5 void printer_usage(int sid) { int i; for(i=0;iMAX_PRINTERS;i++) printf(Printer%d:%d ,i,get_sem_val(sid,i)); } 其中,sid为信号灯组标识,semnum为信号灯编号。函数get_sem_val返回信号量的值,函数init_semaphore设置信号量的值为initval。函数printer_usage打印出信号灯组sid的信号量的值。 5.6 UNIX域套接字 UNIX域协议不是一个真正的网络通信协议,它提供同一台计算机上的进程之间进行通信的手段。UNIX域套接字与同一台机器上的域套接字相连,每一个与套接字的新连接都产生一个新的通信管道。同一台机器上的客户机和服务器进程可以通过UNIX域套接字进行通信。与TCP套接字相比,使用UNIX域套接字通信的效率更高。UNIX域套接字经常被用来代替命名管道实现很多重要服务中的IPC,也可以用socketpair()来得到非命名Unix域套接字,与非命名管道类似。 1.命名UNIX域套接字 这种域套接字需要有自己的套接字地址,即UNIX域协议地址结构sockaddr_un: #include sys/un.h struct sockaddr_un { short int sun_family; char sun_path[104]; } while(1) { memset(r_buf,0,sizeof(r_buf)); ret_size=read(fd,r_buf,r_size); if(ret_size==-1) if(errno==EAGAIN) printf(no data avlaible\n); printf(real read bytes %d\n,ret_size); sleep(1); } pause(); unlink(FIFO_SERVER); } 首先,调用mkfifo创建命名管道FIFO_SERVER,如果创建成功,则以读方式打开该管道[wei2],并将该管道设置为非阻塞状态。通过键盘输入希望读取的字节数,从FIFO_SERVER中读取消息,如果成功,则输出实际读到的字节数,否则,输出出错信息。 下面介绍UNIX系统V提供的三种进程间通信方式。 5.3 消息通信 利用消息通信,进程可以将具有一定格式的消息发送给任意进程。UNIX系统V为消息通信提供了四个系统调用。 1.生成一个消息队列 #include sys/types.h #include sys/ipc.h #include sys/msg.h int msgget(key_t key,int flags) /* 获取消息队列标识数 */ /* key:消息队列关键字,长整型 */* flags:操作标志 */ 其中,参数key是通信双方约定的消息队列关键字,它是一个非负长整型。UNIX IPC通信机构将根据它生成一个消息队列,并返回一个队列标识数ID。队列ID与文件描述字相似,但是进程只要知道该值就可适应它,不必像文件ID那样只有通过继承才能对同一个文件操作。当指定关键字的消息队列存在时,msgget就简单地返回该队列的ID。 参数flags类似于打开和创建文件时的第二个参数o_flags和mode的组合。 2.向消息队列发送一个消息 #include sys/types.h #include sys/ipc.h #include sys/msg.h int msgsnd(int qid,struct msgbuf * buf,int nbytes,int flags) 其中,参数qid是消息队列ID,nbytes是消息正文的长度,flags是发送标志。如果flags为零,则当消息队列满时进程阻塞自己;如果flags中IPC以NOWAIT(04000)置位,则消息队列满时msgsnd返回-1,不阻塞进程。 参数buf指定一个由用户定义的消息结构,其基本格式如下: struct msgtype{ long mtype ; char text[NBYTES]; }; 其中,mtype是正整数,text[]是长度为NBYTES的正文,其长度是有限制的。 3.从消息队列中接收一个消息 #include sys/types.h #include sys/ipc.h #inclu

文档评论(0)

youngyu0329 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档