PHP函数信号与共享内存函数

shmop_* 函数在 Windows 2000 之前的版本不可用,且在 Windows 系统下,只有将 PHP 安装为服务器模式的前提下才能工作(CLI 和 CGI 模式下 shmop_* 函数无法工作),即将 php.ini 文件中的";extension=php_shmop.dll"选项中的";"删除,保存后重新启动 Apache 服务器.另外,本章其他函数仅支持 UNIX,Linux 系统.

  1. shmop_close   关闭共享内存
    <?php
    $shm_key=ftok(__FILE__,'t');					//获取路径下系统的进程标识符
    $shm_id=shmop_open($shm_key,"c",0644,100);	//建立一个共享内存
    
    shmop_close($shm_id);						//关闭共享内存
    ?>
  2. shmop_delete   删除一个共享内存
    <?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);						//删除共享内存
    ?>
  3. shmop_open   建立一个共享内存标识符
    <?php
    $shm_key=ftok(_FILE_,'t');					//获取路径下系统的进程标识符
    $shm_id=shmop_open($shm_key,"c",0644,100);	//建立一个共享内存
    //$shm_key	必选参数.系统标识符,可以是十进制或十六进制
    //"c"	必选参数.用于建立一个新的共享内存块或者尝试打开一个拥有相同系统标识符的内存,用作读写(其他还有"a","w","n")
    //0644	必选参数.共享内存的属性,同文件属性类似,必须以八进制形式
    //100	必选参数.共享内存的大小,以字节为单位
    ?>
  4. shmop_read   在共享内存中读取资料
    <?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);
    ?>
  5. shmop_size   获取共享内存的大小
    <?php
    $shm_key=ftok(_FILE_,'t');							//获取路径下系统的进程标识符
    $shm_id=shmop_open($shm_key,"c",0644,100);			//建立一个共享内存
    
    $result=shmop_size($shm_id);						//返回"100"
    ?>
  6. shmop_write   将资料写入共享内存中
    <?php
    $shm_key=ftok(_FILE_,'t');							//获取路径下系统的进程标识符
    $shm_id=shmop_open($shm_key,"c",0644,100);			//建立一个共享内存
    
    $result=shmop_write($shm_id,'爱玩C',0);				//从0开始写入
    ?>
  7. ftok   转换路径到系统 System V 进程的值
    <?php
    $key=ftok(__FILE__,'t');		//获取当前路径下系统的进程标识符
    ?>
  8. msg_get_queue   建立信息队列
    <?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);				//释放连接的资源
    ?>
  9. msg_receive   在信息队列中读取信息
    <?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);				//释放连接的资源
    ?>
  10. msg_remove_queue    销毁信息队列
  11. msg_send   发信息到信息队列
    <?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);								//释放连接的资源
    ?>
  12. msg_set_queue   设置信息队列的数据结构
    <?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));						//输出结构信息
    ?>
  13. msg_stat_queue    获取信息队列的数据结构
  14. sem_acquire   捕获系统信号
    <?php
    $f_id=ftok('home/test/t.php','R');	//获取系统标识符
    $key=sem_get($key,1024,0644);
    sem_acquire($key);					//捕获系统进程的信号数量,若捕获信号的数量超过限度,则进程在捕捉时会先封锁住信号					
    ?>
  15. sem_get    取得系统进程的信号代码值
    <?php
    $f_id=ftok('home/test/t.php','R');	//获取系统标识符
    $key=sem_get($key,1024,0644);		//1024:同时可取得的最大处理数量,0644:控制的权限				
    ?>
  16. sem_release   释放系统信号
    <?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);					//释放信号资源			
    ?>
  17. sem_remove   删除系统信号
    <?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);					//删除信号连接			
    ?>
  18. shm_attach    开启或建立与内存的连接
  19. shm_detach   中止与内存的连接
    <?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);					//关闭连接释放资源		
    ?>
  20. shm_get_var   获取内存中的变量值内容
    <?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);					//关闭连接释放资源		
    ?>
  21. shm_put_var    增加或修改内存中的变量值
  22. shm_remove_var   删除内存中指定的变量值
    <?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);					//关闭连接释放资源		
    ?>
  23. shm_remove   清除共享内存区域的所有内容
    <?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);					//关闭连接释放资源		
    ?>
原文地址:https://www.cnblogs.com/iwanc/p/2654620.html