




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 进程通信 communication 低级通讯 信号机制高级通讯 管道 IPC Scoket 2 进程间通信的类型 低级通信 只能传递状态和整数值 控制信息 包括进程互斥和同步所采用的信号量和管程机制 优点的速度快 缺点是 传送信息量小 效率低 每次通信传递的信息量固定 若传递较多信息则需要进行多次通信 编程复杂 用户直接实现通信的细节 编程复杂 容易出错 高级通信 能够传送任意数量的数据 包括三类 共享存储区 管道 消息 返回 1 低级通信和高级通信 3 2 直接通信和间接通信 直接通信 信息直接传递给接收方 如管道 在发送时 指定接收方的地址或标识 也可以指定多个接收方或广播式地址 在接收时 允许接收来自任意发送方的消息 并在读出消息的同时获取发送方的地址 间接通信 借助于收发双方进程之外的共享数据结构作为通信中转 如消息队列 通常收方和发方的数目可以是任意的 4 3 高级通信的特征 通信链路 communicationlink 点对点 多点 广播单向 双向有容量 链路带缓冲区 无容量 发送方和接收方需自备缓冲区 数据格式 字节流 bytestream 各次发送之间的分界 在接收时不被保留 没有格式 报文 datagram message 各次发送之间的分界 在接收时被保留 通常有格式 如表示类型 定长 不定长报文 可靠报文 不可靠报文 收发操作的同步方式发送阻塞 直到被链路容量或接收方所接受 和不阻塞 失败时立即返回 接收阻塞 直到有数据可读 和不阻塞 无数据时立即返回 由事件驱动收发 在允许发送或有数据可读时 才做发送和接收操作 5 低级通讯 信号机制 一个进程向另一个进程或进程组 或自己 发送 kill系统调用 发送者必须具有接收者同样的有效用户ID 或者发送者是超级用户身份某些键盘按键 如 中断字符 通常是Ctrl C或Del 暂停字符 如Ctrl Z 硬件条件 如 除数为零 浮点运算错 访问非法地址等异常条件软件条件 如 Socket中有加急数据到达 1 信号类型 6 2 对信号的处理 进程可以设置信号处理例程 signal系统调用 在接收到信号时就被调用 称为 捕获 该信号 信号处理例程的参数是接收到信号的编号 进程也可以忽略指定的信号 SIG IGN 只有SIGKILL信号 无条件终止进程 和SIGSTOP 使进程暂停 不能被忽略 在库函数system 的实现中 通过fork和exec加载新程序之后 在父进程中对SIGINT和SIGQUIT都要忽略 然后wait直到子进程终止 才恢复对SIGINT和SIGQUIT的原有处理例程 进程创建后为信号设立了默认处理例程 SIG DFL 如 终止并留映象文件 core 7 信号的接收Signal signame function function SIG DFL SIG IGN user function SIG DFL 系统默认处理方式SIG IGN 忽略该信号 除SIGSTOP SIGKILL User functiong 按用户指定的处理方式处理 主要针对SIGUSR1 SIGUSR2 16 17号 信号 其它信号如忽略可按此方式处理 8 信号的发送按约定的事件发送 按键 硬件 函数 通过kill函数直接发送信号给指定的进程 kill pid sig programkill signamepid terminal 9 例1 include includestaticvoidsig usr int intmain void signal SIGUSR1 sig usr signal SIGUSR2 sig usr for pause staticvoidsig usr intsign if sign SIGUSR1 printf receiveSIGUS1 n elseif sign SIGUSR2 printf receiveSIGUS2 n elseprintf receiveother return a out Kill USR1pidnumKill USR2pidnum 10 例2 include include includevoidwaiting stop intwait mark main intp1 p2 signal SIGINT SIG IGN signal SIGQUIT SIG IGN while p1 fork 1 if p1 0 while p2 fork 1 if p2 0 wait mark 1 signal SIGINT stop waiting kill p1 16 kill p2 17 wait 0 wait 0 printf parentprocessiskilled n exit 0 11 else wait mark 1 signal 17 stop waiting printf childprocess2iskilledbyparnent n exit 0 else wait mark 1 signal 16 stop waiting printf child1iskilled n exit 0 voidwaiting while wait mark 0 voidstop wait mark 0 12 高级通讯 管道 管道的概念 pipe 管道是UNIXIPC的最老形式 并且所有UNIX系统都提供此种通信机制 管道有两种限制 1 它们是半双工的 数据只能在一个方向上流动 2 它们只能在具有公共祖先的进程之间使用 通常 一个管道由一个进程创建 然后该进程调用fork 此后父 子进程之间就可应用该管道 实现形式pipe FIFO 13 通过pipe系统调用创建无名管道 得到两个文件描述符 分别用于写和读 intpipe intfildes 2 文件描述符fildes 0 为读端 fildes 1 为写端 通过系统调用write和read进行管道的写和读 进程间双向通信 通常需要两个管道 只适用于父子进程之间或父进程安排的各个子进程之间 UNIX中的命名管道 可通过mknod系统调用建立 指定mode为S IFIFOintmknod constchar path mode tmode dev tdev 14 FIFO FIFO有两种用途 1 FIFO由shell命令使用以便将数据从一条管道线传送到另一条 为此无需创建中间临时文件 2 FIFO用于客户机 服务器应用程序中 以在客户机和服务器之间传递数据 15 mkfifomyfifo echo helloworld myfifo cat myfifo 16 高级通讯 IPC 共享存储器系统 Shared MemorySystem 消息传递系统 MessagepassingSystem 17 1共享存储器系统 共享存储器系统 相互通讯的进程通过共享数据结构和存储区进行通讯 因而可进一步分为 基于共享数据结构的通讯方式 低效 只适于传递少量数据 基于共享存储区的通讯方式 为了传送大量数据 在存储区中划出一块共享存储区 诸进程可通过对共享存储区进行读或写数据实现通讯 向系统申请共享存储区中的一个分区指定该分区的关键字如果已经给其他进程分配了这样的存储区 将使用分区的描述符返回给申请者4申请者将申请到的共享分区挂到本进程上 返回 18 共享存储器系统操作 创建或打开共享存储区 shmget 依据用户给出的整数值key 创建新区或打开现有区 返回一个共享存储区ID 连接共享存储区 shmat 连接共享存储区到本进程的地址空间 可以指定虚拟地址或由系统分配 返回共享存储区首地址 父进程已连接的共享存储区可被fork创建的子进程继承 拆除共享存储区连接 shmdt 拆除共享存储区与本进程地址空间的连接 共享存储区控制 shmctl 对共享存储区进行控制 如 共享存储区的删除需要显式调用shmctl shmid IPC RMID 0 19 include include include include defineSHMSZ27intmain void charc intshmid key tkey char shm s createashare memorynamed5678 key 5678 if shmid shmget key SHMSZ IPC CREAT 0666 0 exit 0 connectingthisshare memorytoprocess if shm shmat shmid NULL 0 NULL exit 0 Shm 1 c 20 writtingsomeletterstothismemoryforotherprocess s shm for c a c z c s c s waittingforanotherprocesschangethismemory while shm sleep 1 exit 0 21 include include include include defineSHMSZ27intmain void intshmid key tkey char shm s key 5678 if shmid shmget key SHMSZ 0666 0 exit 0 Shm 2 c 22 if shm shmat shmid NULL 0 char 1 exit 0 for s shm s s putchar s putchar n shm exit 0 23 2消息队列 消息队列 messagequeue 每个message不定长 由类型 type 和正文 text 组成UNIX消息队列API msgget依据用户给出的整数值key 创建新消息队列或打开现有消息队列 返回一个消息队列ID msgsnd发送消息 msgrcv接收消息 可以指定消息类型 没有消息时 返回 1 msgctl对消息队列进行控制 如删除消息队列 通过指定多种消息类型 可以在一个消息队列中建立多个虚拟信道注意 消息队列不随创建它的进程的终止而自动撤销 必须用msgctl msgqid IPC RMID 0 另外 msgget获得消息队列ID之后 fork创建子进程 在子进程中能否继承该消息队列ID而不必再一次msgget 24 例msg server cmsg client c 25 套接字 socket 双向的 数据格式为字节流 一对一 或报文 多对一 一对多 主要用于网络通信 支持client server模式和peer to peer模式 本机或网络中的两个或多个进程进行交互 提供TCP IP协议支持UNIX套接字 基于TCP IP或UNIX域 返回 26 套接字函数 1创建套接字 includeIntsocket intdomain inttype intprotocol 注 domain AF UNIX AF INET type SOCK STREAM 流 SOCK DRAM 数据报 Protocol 0 UNIX域 TCP STREAM UDP DGRAM 27 套接字函数 2关闭套接字 includeintclose intsocket intshutdown intsocket inthow 注 how SHUT RD 停止从此套接字接收数据 拒绝进一步到达的数据SHUT WR 停止从该套接字发送数据 SHUT RDWR 停止从该套接字接收和发送数据 28 重要的结构 includeStructin addr in addr ts addr in addr t unsignedlongint includestructhostent char h name char h aliases inth addrtype AF INET inth lengthchar h addr list 主机的IP地址 29 IP地址转化函数 include数点IP地址转整数IPin addr tinet addr constchar cp 整数IP地址转数点IPchar inet ntoa structin addrin 30 获取主机的信息函数 includestructhostent gethostbyname char name structhostent gethostbyaddr void addrsize tlength inttype 对于internet地址 type AF INET length 字节长度name获取本机信息可通过下面函数 includeintgethostname char name size tlength 31 重要的结构 includeStructsockaddr un sa family tsun family AF UNIXcharsun path includestructsockaddr in sa family tsin family AF INETin port tsin port structin addrsin addr unsignedcharsin zero 8 保留 32 流套接字工作图 33 套接字操作函数 include1 intbind intsocket structsockaddr address socklen taddress len 调用成功返回0 否则返回 1并置errnostructsockaddr scokaddr un或sockaddr in 2 Intconnect intsocket structsockaddr addr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国洗蛋机市场调查研究报告
- 2025年中国水粉画市场调查研究报告
- 2025年中国毛用匀染剂市场调查研究报告
- 2025年中国树脂工艺制品市场调查研究报告
- 2025年中国液化气专用球阀行业市场发展前景及发展趋势与投资战略研究报告
- 2025年中国无卡木材旋切机摩擦辊市场调查研究报告
- 2025-2030年中国达舒克项目投资可行性研究分析报告
- 2025年中国承口套筒数据监测研究报告
- 2025年中国成品粮数据监测研究报告
- 2025年中国彩棉被市场调查研究报告
- 2025年广东省广州市南沙区中考二模道德与法治试题
- 2025届重庆市普通高中学业水平选择性考试预测历史试题(含答案)
- 2025-2030中国眼底照相机行业市场发展趋势与前景展望战略研究报告
- 2024年深圳市大鹏新区区属公办中小学招聘教师真题
- 人教版小学语文四年级下册作文范文2
- 大学语文试题及答案琴
- 红十字会资产管理制度
- T/CSPSTC 112-2023氢气管道工程施工技术规范
- 24春国家开放大学《农业推广》调查报告参考答案
- 押金收据条(通用版)
- [甘肃]最新甘肃省造价文件汇编(310页)
评论
0/150
提交评论