前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux进程通信之管道通信2

Linux进程通信之管道通信2

作者头像
北溟有鱼QAQ
发布2021-09-08 12:07:23
1.7K0
发布2021-09-08 12:07:23
举报
文章被收录于专栏:北溟有鱼QAQ

随机进程管道通信(无血缘关系)

读进程
代码语言:javascript
复制
<?php

/**
 * Created by PhpStorm
 * User: 北溟有鱼QAQ
 * Date: 2021-09-01
 * Time: 15:26
 * Email: 1769360227@qq.com
 */

$file = 'pipe_file';
//检测是否存在管道文件
if(!posix_access($file,POSIX_F_OK))
{
    //创建管道文件
    if(posix_mkfifo($file,0666))
    {
        fprintf(STDOUT,"create ok\r\n");
    }
}
//以读方式打开文件
$fd = fopen($file,'r');

//设置非阻塞方式
stream_set_blocking($fd,0);
while (1)
{
    $data = fread($fd,64);
    if($data){
        fprintf(STDOUT,"pid=%d recv data=%s",getmypid(),$data);
    }
}

fclose($fd);

写进程

代码语言:javascript
复制
<?php

/**
 * Created by PhpStorm
 * User: 北溟有鱼QAQ
 * Date: 2021-09-01
 * Time: 15:06
 * Email: 1769360227@qq.com
 */


$file = 'pipe_file';
//检测是否存在管道文件
if(!posix_access($file,POSIX_F_OK))
{
    //创建管道文件
    if(posix_mkfifo($file,0666))
    {
        fprintf(STDOUT,"create ok\r\n");
    }
}

$fd = fopen($file,'w');

while (1)
{

    $data = fgets(STDIN,64);
    if($data){
        $len = fwrite($fd,$data);

        fprintf(STDOUT,"pid=%d write len = %d \n",getmypid(),$len);

    }


}

fclose($fd);

验证

通过以上图片可以发现,我们实现了不同进程间的通信,这样就可以方便一些同学在使用workman 、swoole 配合其他 fpm框架使用的时候,、拿到跨进程的数据,从而实现自己的业务逻辑

注意
  • 找到管道文件,使用cat pipe_file也相当于读取管道内容
  • 当一个读进程 多个写进程时,读进程是可以正常工作获取管道内容的
  • 当一个写进程,多个读进程时,读进程会依次从管道中哪去数据,也是可以正常工作(类似于消息队列)
  • 切记,读进程一定要设置非阻塞方式运行,否则可能会出现不同效果,导致认为代码错误

本文为北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.umdzz.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 随机进程管道通信(无血缘关系)
    • 读进程
      • 写进程
        • 验证
          • 注意
      相关产品与服务
      消息队列 CMQ
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档