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

php 进程间通信:管道、uds

1、管道

1.1、管道概念

  • 管道是单向的、先进先出的,它把进程的输出和另一个进程的输入连接在一起。
  • 一个进程往管道写入数据,另一个进程从管道读取数据。
  • 数据被从管道中读取出来之后,将被删除,其他进程无法在读取到相应的数据。
  • 管道提供了简单的流控制,进程读取空管时候,将被阻塞。同时进程写入一个满了的管道会被阻塞,直到另一方写入或者读取管道。
  • 管道包含无名管道和有名管道,前者用于父进程和子进程之间的通信,后者用于任意两个进程之间的通信。

多个进程同时读写会发生什么事情?
管道怎么判断满了?

1.2、管道涉及的函数

posix_mkfifo(string $pathname, int $mode):bool : 创建一个有名管道,参数如下

  • pathname : 创建管道的路径。
  • mode : 管道文件的权限模式。参考liunx 文件权限 例 0666、0755、0777

unlink(string $pathname):bool : 删除管道文件,参数如下

  • pathname : 文件路径

1.3、举个栗子

<?php
$pathname='./'.getmypid().'.pipe';
if(!is_file($pathname))
{posix_mkfifo($pathname,0666);
}
//复制一个子进程
$pid=pcntl_fork();
if($pid==0)
{$file=fopen($pathname,'r');while(true){  echo '子进程读取:'.fread($file,20).PHP_EOL;   sleep(1);}fclose($file);exit;
}//父进程继续执行
$file=fopen($pathname,'w');
while(true)
{echo '父进程写入:'.fwrite($file,time()).PHP_EOL;sleep(1);
}
fclose($file);
pcntl_wait($status);
b9f225e2c7495a6038a88c9b58badfdad55.jpg

注:当前模式为阻塞模式,只有当fread 读取到对应的size大小时,才会返回,否则将阻塞运行。可以使用 stream_set_blocking(resource $pathname,false);来使用非阻塞模式;

2、UDS

http://www.lryc.cn/news/95593.html

相关文章:

  • Stable Diffusion如何生成高质量的图-prompt写法介绍
  • MySQL 高级SQL语句(一)
  • SkyWalking链路追踪-技术文档首页
  • AndroidStudio Memory profiler(内存分析器)
  • 【C++模板进阶】
  • (一)RabbitMQ概念-优势、劣势、应用场景 、AMQP、工作原理
  • JetBrains全家桶:如何自定义实现类TODO注释?
  • 【技术干货】工业级BLE5.2蓝牙模块SKB378 使用教程,AT指令集
  • 零基础深度学习——学习笔记1 (逻辑回归)
  • I want to know on what switchport is connected my computer (10.8.0.2)
  • OpenCv之人脸操作
  • C++[第五章]--指针和引用
  • 用i18next使你的应用国际化-React
  • TSN -促进IT/OT 融合的网络技术
  • 改进的北方苍鹰算法优化BP神经网络---回归+分类两种案例
  • 等保工作如何和企业创新业务发展相结合,实现“安全”和“创新”的火花碰撞?
  • 23.7.25 杭电暑期多校3部分题解
  • 【设计模式——学习笔记】23种设计模式——桥接模式Bridge(原理讲解+应用场景介绍+案例介绍+Java代码实现)
  • 文档翻译软件那么多,哪个能满足你的多语言需求?
  • MySQL 中NULL和空值的区别
  • 阿里云容器镜像仓库(ACR)的创建和使用
  • 工业的相机与镜头(简单选型)
  • numpy广播机制介绍
  • RocketMQ 5.0 无状态实时性消费详解
  • 本地 IDC 中的 K8s 集群如何以 Serverless 方式使用云上计算资源
  • MySQL - 安装、连接、简单介绍
  • 【算法】求欧拉函数(包括完整的证明以及代码模板,建议收藏)
  • Ceph的应用
  • mac m1 触控栏TouchBar功能栏异常
  • “奢侈品”价格的“快消品”,竹叶青这么想赚年轻人的“茶水钱”?