ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

PHP多进程编程(四) 用php实现管道通信类

2021-01-07 22:52:29  阅读:163  来源: 互联网

标签:function PHP return 编程 pipe error php data fifoPath


实现代码如下:


<?php

class Pipe

{

    public  $fifoPath;

    private $w_pipe;

    private $r_pipe;


    /**

     * 自动创建一个管道

     *

     * @param string $name 管道名字

     * @param int $mode  管道的权限,默认任何用户组可以读写

     */

    function __construct($name = 'pipe', $mode = 0666)

    {

        $fifoPath = "/tmp/$name." . posix_getpid();

        if (!file_exists($fifoPath)) {

            if (!posix_mkfifo($fifoPath, $mode)) {

                error("create new pipe ($name) error.");

                return false;

            }

        } else {

            error( "pipe ($name) has exit.");

            return false;

        }

        $this->fifoPath = $fifoPath;

    }

   

///////////////////////////////////////////////////

//  写管道函数开始

///////////////////////////////////////////////////

    function open_write()

    {

        $this->w_pipe = fopen($this->fifoPath, 'w');

        if ($this->w_pipe == NULL) {

            error("open pipe {$this->fifoPath} for write error.");

            return false;

        }

        return true;

    }

 

    function write($data)

    {

        return fwrite($this->w_pipe, $data);

    }


    function write_all($data)

    {

        $w_pipe = fopen($this->fifoPath, 'w');

        fwrite($w_pipe, $data);

        fclose($w_pipe);

    }


    function close_write()

    {

        return fclose($this->w_pipe);

    }

/////////////////////////////////////////////////////////

/// 读管道相关函数开始

////////////////////////////////////////////////////////

    function open_read()

    {

        $this->r_pipe = fopen($this->fifoPath, 'r');

        if ($this->r_pipe == NULL) {

            error("open pipe {$this->fifoPath} for read error.");

            return false;

        }

        return true;

    }


    function read($byte = 1024)

    {

        return fread($this->r_pipe, $byte);

    }


    function read_all()

    {

        $r_pipe = fopen($this->fifoPath, 'r');

        $data = '';

        while (!feof($r_pipe)) {

            //echo "read one K\n";

            $data .= fread($r_pipe, 1024);

        }

        fclose($r_pipe);

        return $data;

    }


    function close_read()

    {

        return fclose($this->r_pipe);

    }

////////////////////////////////////////////////////

    /**

     * 删除管道

     *

     * @return boolean is success

     */

    function rm_pipe()

    {

        return unlink($this->fifoPath);

    }

}

?>


有了这个类,就可以实现简单的管道通信了,因为这个教程是多进程编程系列教程的一个部分。

这个管道类的应用部分,将放到下一节。



标签:function,PHP,return,编程,pipe,error,php,data,fifoPath
来源: https://blog.51cto.com/15077552/2584973

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有