php与c语言管道通信,php多线程之管道通信的例子

php多线程实现管道通信,代码如下:

/*

管道通信:

1. 管道可以认为是一个队列,不同的线程都可以往里面写东西,也都可以从里面读东西。写就是

在队列末尾添加,读就是在队头删除。

2. 管道一般有大小,默认一般是4K,也就是内容超过4K了,你就只能读,不能往里面写了。

3. 默认情况下,管道写入以后,就会被阻止,直到读取他的程序读取把数据读完。而读取线程也会被阻止,

直到有进程向管道写入数据。当然,你可以改变这样的默认属性,用stream_set_block 函数,设置成非阻断模式。

一个封装好的管道类。

*/

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);

}

}

/*

此类实现简单的管道通信*/

?>

有关php中多线程的实现方法,请参考如下文章:理解 php 多线程的妙用

php 多线程抓取网页的代码分享

php多线程(不使用fork)实例分享

php多线程类的代码分享

php支持多线程下载的例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值