深圳市一览网络股份有限
公司
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);