当前位置: 首页 > news >正文

深圳惠州网站建设公司域名注册服务商

深圳惠州网站建设公司,域名注册服务商,加热器网站怎么做的,网络科技网站建设进程间通信目的 数据传输#xff1a;一个进程需要将它的数据发送给另一个进程资源共享#xff1a;多个进程之间共享同样的资源。通知事件#xff1a;一个进程需要向另一个或一组进程发送消息#xff0c;通知它#xff08;它们#xff09;发生了某种事件#xff08;如进…进程间通信目的 数据传输一个进程需要将它的数据发送给另一个进程资源共享多个进程之间共享同样的资源。通知事件一个进程需要向另一个或一组进程发送消息通知它它们发生了某种事件如进程终止 时要通知父进程。进程控制有些进程希望完全控制另一个进程的执行如Debug进程此时控制进程希望能够拦截另 一个进程的所有陷入和异常并能够及时知道它的状态改变 IPC linux系统下7中文件类型 -- 文件d 目录l 符号链接 伪文件不占用内存s 套接字b 块设备c 字符设备p 管道 Linux 环境下进程地址空间相互独立每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另 一个进程中都看不到所以进程和进程之间不能相互访问要交换数据必须通过内核在内核中开辟一块缓冲区 进程 1 把数据从用户空间拷到内核缓冲区进程2 再从内核缓冲区把数据读走内核提供的这种机制称为进程间通 信IPCInterProcessCommunication。 在进程间完成数据传递需要借助操作系统提供特殊的方法如文件、管道、信号、共享内存、消息队列、套 接字、命名管道等。随着计算机的蓬勃发展一些方法由于自身设计缺陷被淘汰或者弃用。现今常用的进程间通信 方式有管道 (使用最简单) pipe管道一般读写行为 fifo有名管道用于非血缘关系信号 (开销最小)共享映射区 (无血缘关系)本地套接字 (最稳定) 管道 管道的概念 管道是一种最基本的 IPC 机制作用于有血缘关系的进程之间完成数据传递。调用 pipe 系统函数即可创建一 个管道。 管道特质 其本质是一个伪文件(实为内核缓冲区)由两个文件描述符引用一个表示读端一个表示写端。规定数据从管道的写端流入管道从读端流出。 管道的原理: 管道实为内核使用环形队列机制借助内核缓冲区(4k)实现。 管道的局限性 数据自己读不能自己写。数据一旦被读走便不在管道中存在不可反复读取。由于管道采用半双工通信方式。因此数据只能在一个方向上流动只能在有公共祖先的进程间使用管道 常见的通信方式 单工通信只能收不能发半双工通信数据只能在一个方向上流动全双工通信。 管道的特点 只能用于具有共同祖先的进程具有亲缘关系的进程之间进行通信通常一个管道由一个进程创 建然后该进程调用fork此后父、子进程之间就可应用该管道。管道提供流式服务一般而言进程退出管道释放所以管道的生命周期随进程一般而言内核会对管道操作进行同步与互斥管道是半双工的数据只能向一个方向流动需要双方通信时需要建立起两个管道 pipe 函数 int pipe (int pipefd[2] ); 成功0失败-1设置 errno 函数调用成功返回 r/w 两个文件描述符。无需 open但需手动 close。规定fd[0] → r fd[1] → w就像 0 对应标准输入1 对应标准输出一样。向管道文件读写数据其实是在读写内核缓冲区。 管道创建成功以后创建该管道的进程父进程同时掌握着管道的读端和写端。如何实现父子进程间通信呢 通常可以采用如下步骤 父进程调用 pipe 函数创建管道得到两个文件描述符 fd[0]、fd[1]指向管道的读端和写端。 父进程调用 fork 创建子进程那么子进程也有两个文件描述符指向同一管道。 父进程关闭管道读端子进程关闭管道写端。父进程可以向管道中写入数据子进程将管道中的数据读出。 由于管道是利用环形队列实现的数据从写端流入管道从读端流出这样就实现了进程间通信。 #includestdio.h#includeunistd.h#includestdlib.h#includestring.hint main(void){int fd[2];pid_t pid;int retpipe(fd);if(ret-1){ perror(pipe error:);exit(1);} pid fork();if(pid-1){perror(perror error:);exit(1);}else if(pid0){ //子进程 读数据 close(fd[1]);//关闭管道的写端char buf[1024];retread(fd[0],buf,sizeof(buf));if(ret 0){ printf(----\n);} write(STDOUT_FILENO,buf,ret);}else{ //父进程写数据sleep(1); close(fd[0]);//关掉管道的读端write(fd[1],hello pipe\n,strlen(hello pipe\n));} }管道的读写行为 使用管道需要注意以下 4 种特殊情况假设都是阻塞 I/O 操作没有设置 O_NONBLOCK 标志 如果所有指向管道写端的文件描述符都关闭了管道写端引用计数为 0而仍然有进程从管道的读端读数 据那么管道中剩余的数据都被读取后再次 read 会返回 0就像读到文件末尾一样。如果有指向管道写端的文件描述符没关闭管道写端引用计数大于 0而持有管道写端的进程也没有向管 道中写数据这时有进程从管道读端读数据那么管道中剩余的数据都被读取后再次 read 会阻塞直到管道中有 数据可读了才读取数据并返回。如果所有指向管道读端的文件描述符都关闭了管道读端引用计数为 0这时有进程向管道的写端 write 那么该进程会收到信号 SIGPIPE通常会导致进程异常终止。当然也可以对 SIGPIPE 信号实施捕捉不终止进程。具 体方法信号章节详细介绍。如果有指向管道读端的文件描述符没关闭管道读端引用计数大于 0而持有管道读端的进程也没有从管 道中读数据这时有进程向管道写端写数据那么在管道被写满时再次 write 会阻塞直到管道中有空位置了才写 入数据并返回。 总结 读管道 管道中有数据read 返回实际读到的字节数管道中无数据 (1) 管道写端被全部关闭read 返回 0(好像读到文件结尾) (2) 写端没有全部被关闭read 阻塞等待(不久的将来可能有数据递达此时会让出 cpu) 写管道 管道读端全部被关闭 进程异常终止(也可使用捕捉 SIGPIPE 信号使进程不终止)管道读端没有全部关闭 (1) 管道已满write 阻塞。 (2) 管道未满write 将数据写入并返回实际写入的字节数。 管道缓冲区大小 可以使用 ulimit–a 命令来查看当前系统中创建管道文件所对应的内核缓冲区大小。通常为 pipe size (512bytes,-p)8也可以使用 fpathconf 函数借助参数 选项来查看。使用该宏应引入头文件unistd.h long fpathconf(int fd,int name); 成功返回管道的大小 失败-1设置 errno管道的优劣 优点简单相比信号套接字实现进程间通信简单很多。 缺点 只能单向通信双向通信需建立两个管道。只能用于父子、兄弟进程(有共同祖先)间通信。该问题后来使用 fifo 有名管道解决。 FIFO FIFO 常被称为命名管道以区分管道(pipe)。管道(pipe)只能用于“有血缘关系”的进程间。但通过 FIFO不相 关的进程也能交换数据。 FIFO 是 Linux 基础文件类型中的一种。但FIFO 文件在磁盘上没有数据块仅仅用来标识内核中一条通道。各 进程可以打开这个文件进行 read/write实际上是在读写内核通道这样就实现了进程间通信。 创建方式 命令mkfifo 管道名库函数int mkfifo(const char*pathname, mode_t mode); 成功0 失败-1 一旦使用 mkfifo 创建了一个 FIFO就可以使用 open 打开它常见的文件 I/O 函数都可用于 fifo。如 close、 read、 write、unlink 等。
http://www.sadfv.cn/news/192751/

相关文章:

  • 上海浦东建设集团官方网站网站能需要怎么做才不会被攻击
  • 做网站是用什么软件做的个人购买链接
  • 中山网站备案做logo宣传语的网站
  • 网站开发后端语言有哪些泰安吧百度贴吧
  • 关于网站建设的策划案迪庆网站建设
  • 网站制作推广网站改版如何做301
  • 做网站费用怎么记分录制作网线水晶头线序
  • 电商网站优化方案义乌网页制作
  • 网站建设的核心是什么怎么去掉网站首页尾缀
  • 猪八戒网站建设公司网站浏览量提升
  • 重庆网站空间主机评价网站建设 印花税
  • 购物网站建设的意义与目的免费引流推广怎么做
  • 云南公司建网站多少钱免费申请商家收款码
  • 榆林华科网站建设查网站二级域名
  • 养殖公司网站深建工程建设集团
  • 公众号里链接的网站怎么做的租网站服务器一个月多少钱
  • 企业网站推广工具网站themes目录
  • 美词网站建设坪山网站建设设计
  • 外贸网站免费模板大气简洁网站
  • APP做网站购物咨询主题WordPress
  • 做微新闻怎么发视频网站备案查询网站
  • 网站建设 重庆dtu网站开发
  • 网站小程序怎么做html模板网
  • 建立中国近代美育体系的人是谁东莞seo网站推广建设
  • 静态网站建设报告建立一平台个网站需要多少钱
  • 怎样做艾条艾柱网站c 做游戏的网站教学
  • 广州做网站报价鄂尔多斯网站制作 建设
  • 自适应 网站网站建设的经验总结
  • 在线销售型的网站WordPress套壳
  • 简述网站的设计流程成都网站开发的公司