PHP函数-信号与共享内存函数
2012-08-24 18:09 BytesLoop 阅读(772) 评论(0) 编辑 收藏 举报shmop_* 函数在 Windows 2000 之前的版本不可用,且在 Windows 系统下,只有将 PHP 安装为服务器模式的前提下才能工作(CLI 和 CGI 模式下 shmop_* 函数无法工作),即将 php.ini 文件中的";extension=php_shmop.dll"选项中的";"删除,保存后重新启动 Apache 服务器.另外,本章其他函数仅支持 UNIX,Linux 系统.
- shmop_close 关闭共享内存
123456
<?php
$shm_key
=
ftok
(
__FILE__
,
't'
);
//获取路径下系统的进程标识符
$shm_id
=shmop_open(
$shm_key
,
"c"
,0644,100);
//建立一个共享内存
shmop_close(
$shm_id
);
//关闭共享内存
?>
- shmop_delete 删除一个共享内存
1234567
<?php
$shm_key
=
ftok
(_FILE_,
't'
);
//获取路径下系统的系统标识符
$shm_id
=shmop_open(
$shm_key
,
"c"
,0777,100);
//建立一个共享内存
$result
=shmop_write(
$shm_id
,
'iwanc'
.0);
//写入内容到内存
shmop_delete(
$shm_id
);
//删除共享内存
?>
- shmop_open 建立一个共享内存标识符
12345678
<?php
$shm_key
=
ftok
(_FILE_,
't'
);
//获取路径下系统的进程标识符
$shm_id
=shmop_open(
$shm_key
,
"c"
,0644,100);
//建立一个共享内存
//$shm_key 必选参数.系统标识符,可以是十进制或十六进制
//"c" 必选参数.用于建立一个新的共享内存块或者尝试打开一个拥有相同系统标识符的内存,用作读写(其他还有"a","w","n")
//0644 必选参数.共享内存的属性,同文件属性类似,必须以八进制形式
//100 必选参数.共享内存的大小,以字节为单位
?>
- shmop_read 在共享内存中读取资料
12345678
<?php
$shm_key
=
ftok
(_FILE_,
't'
);
//获取路径下系统的进程标识符
$shm_id
=shmop_open(
$shm_key
,
"c"
,0644,100);
//建立一个共享内存
$result
=shmop_write(
$shm_id
,
'爱玩网iwanc.com'
,0);
//写入内容到内存
$shm_data
=shmop_read(
$shm_id
,0,6);
//$shm_id:共享内存的标识符,从0位置开始读取,读取6个字节数量,返回"爱玩网"
shmop_close(
$shm_id
);
?>
- shmop_size 获取共享内存的大小
123456
<?php
$shm_key
=
ftok
(_FILE_,
't'
);
//获取路径下系统的进程标识符
$shm_id
=shmop_open(
$shm_key
,
"c"
,0644,100);
//建立一个共享内存
$result
=shmop_size(
$shm_id
);
//返回"100"
?>
- shmop_write 将资料写入共享内存中
123456
<?php
$shm_key
=
ftok
(_FILE_,
't'
);
//获取路径下系统的进程标识符
$shm_id
=shmop_open(
$shm_key
,
"c"
,0644,100);
//建立一个共享内存
$result
=shmop_write(
$shm_id
,
'爱玩C'
,0);
//从0开始写入
?>
- ftok 转换路径到系统 System V 进程的值
123
<?php
$key
=
ftok
(
__FILE__
,
't'
);
//获取当前路径下系统的进程标识符
?>
- msg_get_queue 建立信息队列
1234567891011
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
$key
=msg_get_queue(
$f_id
,0666);
//$f_id:系统标识符.0666:进程间通讯权限,默认为0666.如果能成功存取系统标识的信息队列,则返回一个标识符
if
(msg_receive(
$key
,1,
$type
,100,
$msg
,true,0,
$error
)){
echo
"$msg"
;
}
else
{
echo
$error
;
}
msg_remove_queue(
$key
);
//释放连接的资源
?>
- msg_receive 在信息队列中读取信息
12345678910111213
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=msg_get_queue(
$f_id
,0666);
//建立连接
if
(msg_receive(
$key
,1,
$msg_type
,1600,
$msg
,true,0,
$msg_error
)){
if
(
$msg
!=
'quit'
){
//如果不是末尾
echo
"$msg"
;
}
}
else
{
echo
$msg_error
;
//出现错误则输出错误信息
}
msg_remove_queue(
$key
);
//释放连接的资源
?>
- msg_remove_queue 销毁信息队列
- msg_send 发信息到信息队列
12345678
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=msg_get_queue(
$f_id
,0666);
//建立连接
if
(!msg_send(
$key
,1,
'爱玩C'
,true,true,
$msg_error
)){
//发送消息进队列
echo
"消息没有被发送,错误:$msg_error"
;
//返回错误消息
}
msg_remove_queue(
$key
);
//释放连接的资源
?>
- msg_set_queue 设置信息队列的数据结构
12345678910
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=msg_get_queue(
$f_id
,0666);
//建立连接
if
(!msg_send(
$key
,1,
'爱玩C'
,true,true,
$msg_error
)){
//发送消息进队列
echo
"消息没有被发送,错误:$msg_error"
;
//返回错误消息
}
msg_set_queue(
$key
,
array
(
'msg_perm.uid'
=>
'80'
));
//$key:信息队列的标识符,后面是数组数据
print_r(msg_stat_queue(
$key
));
//输出结构信息
?>
- msg_stat_queue 获取信息队列的数据结构
- sem_acquire 捕获系统信号
12345
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=sem_get(
$key
,1024,0644);
sem_acquire(
$key
);
//捕获系统进程的信号数量,若捕获信号的数量超过限度,则进程在捕捉时会先封锁住信号
?>
- sem_get 取得系统进程的信号代码值
1234
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=sem_get(
$key
,1024,0644);
//1024:同时可取得的最大处理数量,0644:控制的权限
?>
- sem_release 释放系统信号
12345678
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=sem_get(
$key
,1024,0644);
//获取一个信号的标识符
$data
=shm_attach(
$key
,1024);
//建立一个共享区
$shm_put_var
(
$data
,
$ine
,
'爱玩C'
);
//写入内容
shm_detach(
$data
);
//关闭连接释放资源
sem_release(
$key
);
//释放信号资源
?>
- sem_remove 删除系统信号
1234567
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=sem_get(
$key
,1024,0644);
//获取一个信号的标识符
$data
=shm_attach(
$key
,1024);
//建立一个共享区
$shm_put_var
(
$data
,
$ine
,
'爱玩C'
);
//写入内容
sem_remove(
$key
);
//删除信号连接
?>
- shm_attach 开启或建立与内存的连接
- shm_detach 中止与内存的连接
1234567
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=sem_get(
$key
,1024,0644);
//获取一个信号的标识符
$data
=shm_attach(
$key
,1024);
//建立一个共享区
print_r(shm_get_var(
$data
,
$ine
));
//读取共享中的内容
shm_detach(
$data
);
//关闭连接释放资源
?>
- shm_get_var 获取内存中的变量值内容
123456789
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=sem_get(
$key
,1024,0644);
//获取一个信号的标识符
$data
=shm_attach(
$key
,1024);
//建立一个共享区
$shm_put_var
(
$data
,
$ine
,
'爱玩C'
);
//将内容写入共享区域
print_r(shm_get_var(
$data
,
$ine
));
//$data:共享内存的标识符,$ine变量的名称
shm_detach(
$data
);
//关闭连接释放资源
?>
- shm_put_var 增加或修改内存中的变量值
- shm_remove_var 删除内存中指定的变量值
123456789101112
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=sem_get(
$key
,1024,0644);
//获取一个信号的标识符
$data
=shm_attach(
$key
,1024);
//建立一个共享区
$shm_put_var
(
$data
,
$ine
,
'爱玩C'
);
//将内容写入共享区域
print_r(shm_get_var(
$data
,
$ine
));
//读取内存中的信息
shm_remove_var(
$data
,
$ine
);
//清除共享中指定的变量值
print_r(shm_get_var(
$data
,
$ine
));
shm_detach(
$data
);
//关闭连接释放资源
?>
- shm_remove 清除共享内存区域的所有内容
123456789101112
<?php
$f_id
=
ftok
(
'home/test/t.php'
,
'R'
);
//获取系统标识符
$key
=sem_get(
$key
,1024,0644);
//获取一个信号的标识符
$data
=shm_attach(
$key
,1024);
//建立一个共享区
$shm_put_var
(
$data
,
$ine
,
'爱玩C'
);
//将内容写入共享区域
print_r(shm_get_var(
$data
,
$ine
));
//读取内存中的信息
shm_remove(
$data
,
$ine
);
//清除共享中所有信息
print_r(shm_get_var(
$data
,
$ine
));
shm_detach(
$data
);
//关闭连接释放资源
?>
作者:skyXnet
邮箱:iwanc@qq.com
出处:http://www.iwanc.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步