background image

深圳市一览网络股份有限
公司
ShenZhen Elanw Network 

Co.,Ltd.

地址:南山科技园南区数字技术园
B2 栋 4A 
Add: Room A,4th Floor,Block 
B2,Digi-Tech Park ,

电话(Tel):0755-86133725
传真(Fax):0755-22632616
网址
(Web):www.YL1001.com

 

 

 

请留意这里的参数。

shmop_read 函数将接受 shmop_open 返回的 ID,我们已知道它,不过它还接受另外两

个参数。第二个参数是您希望从内存段读取的位置,而第三个是您希望读取的字节数。第二个参数可以始
终为

 0,表示数据的开头,但第三个参数可能存在问题,因为我们不知道我们希望读取多少字节。

这非常类似于我们在

 

fread

 函数中的行为,该函数接受两个参数:打开的流资源(由 

fopen

 返回)和您希

望从该流读取的字节数。使用

filesize

 函数(它返回一个文件中的字节数)来完整地读取它。

幸运的是,当使用共享内存段时,

shmop_size 函数返回一个内存段的大小(以字节为单位),类似于

 

filesize

 函数。参见清单 5。

清单

 5. shmop_size 函数返回内存段大小,以字节为单位

代码如下

:

 
<?php

$shmid

 = shmop_open(864, 'c', 0755, 1024);

shmop_write(

$shmid

, "Hello World!", 0);

$size

 = shmop_size(

$shmid

);

echo

 shmop_read(

$shmid

, 0, 

$size

);

?>
回页首
删除内存段
我们学习了如何打开、写入和读取共享内存段。要完成我们的

 CRUD 类,我们还需要学习如何删除内存段。

该任务可使用

 shmop_delete 函数轻松完成,该函数仅接受一个参数:我们希望删除的共享内存 ID。

清单

 6. shmop_delete 标记要删除的内存段

代码如下

:

 
<?php

$shmid

 = shmop_open(864, 'c', 0755, 1024);

shmop_write(

$shmid

, "Hello World!", 0);

shmop_delete(

$shmid

);

?>

 

 

这不会实际删除该内存段。它将该内存段标记为删除,因为共享内存段在有其他进程正在使用它时无法被
删除。

shmop_delete 函数将该内存段标记为删除,阻止任何其他进程打开它。要删除它,我们需要关闭该内

存段。
关闭内存段
打开一个共享内存段会

 “附加” 到它。附加该内存段之后,我们可在其中进行读取和写入,但完成操作后,

我们必须从它解除。这使用清单

 7 中的 shmop_close 函数来完成。

这非常类似于处理文件时的

 fclose 函数。打开包含一个文件的流并在其中读取或写入数据后,我们必须关

闭它,否则将发生锁定。
清单

 7. 使用 shmop_close 与一个内存段分开

代码如下

:

 
<?php

$shmid

 = shmop_open(864, 'c', 0755, 1024);