網络应用程序设计.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文档。上传文档
查看更多
網络应用程序设计

网络应用程序设计 -unit06 Linux进程间通信(IPC) 主要内容 概述 管道(pipe) 命名管道(FIFO) UNIX域Socket 命名UNIX域socket 非命名UNIX域socket 概述 进程间通信的必要性 进程是Linux系统下功能实施的主要实体 网络程序通常涉及多个进程之间相互作用 Linux系统下各进程在独立地址空间运行,无法通过全局变量和参数传递实现信息共享 概述 Linux进程间通信的主要手段 管道(pipe)和命名管道(named pipe/FIFO) 信号(signal) 消息队列(message queue) 共享内存(share memory)和内存映像文件(memory mapped file) 信号量(semaphore) UNIX域socket 管道 定义:单向通信通道 特点: 单向通信 只适用于父子进程间通信 在进程间实现双向数据传输必须创建两个管道 管道 创建管道的函数 int pipe(int fd[2]); 参数: fd-用于通信的一对文件描述符,fd[0]用于读,fd[1]用于写 返回值:0-成功,-1-失败 管道 使用管道通信的流程 用pipe函数创建两个管道:pipe1和pipe2 调用fork创建子进程 父进程用pipe1写数据( 关闭pipe1的读端口),pipe2读数据(关闭pipe2的写端口) 子进程用pipe1写数据( 关闭pipe1的写端口),pipe2读数据(关闭pipe2的读端口) 父子进程各自使用未关闭的端口进行通信 示例: pipe.cpp 命名管道 命名管道的特点 命名管道与一个路径名相关联,以文件形式存在于文件系统中 命名管道的文件名只是便于其他进程引用该管道,文件名所对应的文件中没有数据(只能以阻塞模式使用) 命名管道可以在无父子关系的进程间通信 命名管道 创建命名管道的函数 int mkfifo ( char *pathname, mode_t mode ); 参数: pathname-管道名称,绝对路径名 mode-打开文件的模式 返回值 0-成功,-1-失败 命名管道 命名管道使用 写进程使用mkfifo创建命名管道 写进程调用open以写阻塞方式打开管道 读进程调用open以读阻塞方式打开管道 写进程调用write写入数据 读进程调用read读出数据 示例:fifo_server.cpp,fifo_client.cpp UNIX域socket 概述 UNIX域协议不是真正的网络协议 UNIX域协议提供同一台机器的进程间通信 UNIX域socket是双向通道 UINIX域socket分为命名和非命名两种,分别和命名管道和非命名管道类似 UNIX域socket 命名UNIX域socket UNIX域协议地址 UNIX域协议使用路径名标识服务器和客户端 服务器调用函数bind绑定一个UNIX域socket时以该路径名创建一个文件 struct socketaddr_un{ short int sun_family; //AF_UNIX char sun_path[104]; //文件名的绝对路径 }; UNIX域socket 使用命名UNIX域socket的进程间通信流程 服务器端流程 服务器调用socket创建UNIX域socket 服务器调用bind绑定UNIX域socket和指定地址 服务器调用listen转化为侦听socket 服务器调用accept接收客户端连接 int sockfd=socket(AF_UNIX,…); // step1 struct sockaddr_un addr; char path[104]=”/tmp/unix_socket”; bzero(addr,sizeof(addr)); unlink(path);//删除将要创建的文件,否则绑定失败 addr.sun_family=AF_UNIX; sprintf(addr.sun_path,”%s”,path); bind(sockfd,(struct sockaddr *)addr,sizeof(addr)); //step2 listen(sockfd,5); //step3 int new_fd=accept(sockfd,NULL,0); //step4 … UNIX域socket 使用命名UNIX域socket的进程间通信流程 客户端流程 客户端创建UNIX域socket(同服务器) 客户端调用connect连接服务器 客户端和服务器利用UNIX域socket进行通信 int sockfd=socket(AF_UNIX,…); // step1 struct sockaddr_un addr; char

文档评论(0)

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

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

1亿VIP精品文档

相关文档