shmop ftok】的更多相关文章

http://blog.csdn.net/heiworld/article/details/25426723     对于ftok的理解 http://www.jb51.net/article/51068.htm http://tubaluer.iteye.com/blog/1349797 http://www.cnblogs.com/siqi/p/3997444.html…
PHP进程通信基础--shmop .sem系列函数使用 进程通信的原理就是在系统中开辟出一个共享区域,不管是管道也好,还是共享内存,都是这个原理.如果心中有了这个概念,就会很方便去理解代码.由于官网上shmop函数的英语解释稍显复杂,所以一边练习,一边简单翻译了下.信号量的内存扩展函数,比较简单,也非常好理解.所以就没有翻译.这篇博客是通信基础,所以直接就放实例代码了,按照上代码上敲一遍,就能够明白个七七八八了.如果实在不明白,可以复制进去,直接打断点调试,也是一种不错的学习思路. 这篇文章参考…
问题:希望可以在进程间共享变量,为共享数据提供快速访问 解决方案:除了可以使用APC模块,还可以用shmop或System V共享内存 //创建键 //将一个可访问的文件路径名转换为一个可供 shmop_open() 和其他系统VIPC keys使用的整数,proj参数必须是一个字符串,这个参数其实就是读写方式 //第2个参数传一个字符串, ftok创建一个id $shmop_key = ftok(__FILE__,'b'); echo $shmop_key."<br/>"…
多进程通信的时候,会涉及到共享内存.shmop_open()创建或打开一个内存块 PHP_FUNCTION(shmop_open) { long key, mode, size; struct php_shmop *shmop; struct shmid_ds shm; int rsid; char *flags; int flags_len; //解析传PHP进来的参数 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsll&quo…
系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型如下: key_t ftok( char * fname, int id ) fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255). 当成功执行的时候,一个key_t值将会被返回,否则 -1 被返回. 在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值.如指定文件的索…
ftok函数的定义:系统建立IPC通讯 (消息队列.信号量和共享内存) 时必须指定一个ID值.通常情况下,该id值通过ftok函数得到. 头文件 #include <sys/types.h> #include <sys/ipc.h> 函数原型: key_t ftok( const char * fname, int id ) fname就是你指定的文件名(已经存在的文件名),一般使用当前目录,如: key_t key; key = ftok(".", 1); 这…
[转载] 原文链接:https://blog.csdn.net/u013485792/article/details/50764224 关于ftok函数,先不去了解它的作用来先说说为什么要用它,共享内存,消息队列,信号量它们三个都是找一个中间介质,来进行通信的,这种介质多的是.就是怎么区分出来,就像唯一一个身份证来区分人一样.你随便来一个就行,就是因为这.只要唯一就行,就想起来了文件的设备编号和节点,它是唯一的,但是直接用它来作识别好像不太好,不过可以用它来产生一个号.ftok()就出场了.ft…
SimpleSHM 是一个较小的抽象层,用于使用 PHP 操作共享内存,支持以一种面向对象的方式轻松操作内存段.在编写使用共享内存进行存储的小型应用程序时,这个库可帮助创建非常简洁的代码.可以使用 3 个方法进行处理:读.写和删除.从该类中简单地实例化一个对象,可以控制打开的共享内存段. 类对象和测试代码 <?php //类对象 namespace Simple\SHM; class Block { /** * Holds the system id for the shared memory…
在单独的一个PHP进程中读写.创建.删除共享内存方面上你应该没有问题了.但是实际运行中不可能只是一个PHP进程在运行中.如果在多个进程的情况下你还是沿用单个进程的处理方法,你一定会碰到问题--著名的并行和互斥问题.比如说有2个进程同时需要对同一段内存进行读写.当两个进程同时执行写入操作时,你将得到一个错误的数据,因为该段内存将之可能是最后执行的进程的内容,甚至是由2个进程写入的数据轮流随机出现的一段混合的四不象.这显然是不能接受的.为了解决这个问题,我们必须引入互斥机制.互斥机制在很多操作系统的…
在之前的一篇博客[了解一下共享内存的概念及优缺点]已经对共享内存的概念做了说明.下面就来简单使用共享内存(其实也可以用其他工具,比如redis) PHP做内存共享有两套接口.一个是shm,它实际上是变量共享,会把对象变量序列化后再储存.使用起来倒是挺方便,但是序列化存储对于效率优先的内存访问操作而言就没啥意义了.另外一个是shmop,它是Linux和Windows通用的,不过功能上比shm弱了一些,在 Linux 上,这些函数直接是通过调用 shm* 系列的函数实现,而 Winodows 上也通…
在项目开发中,想要实现PHP多个进程之间共享数据的功能,让客户端连接能够共享一个状态,需要开启共享内存函数shmop.如果预期考虑会遇到这方面需求,那么最好在编译PHP的时候添加--with-shmop选项.但是编译的时候没有添加,只能在重新编译配置了. 一.找到php源码包里的扩展目录,进入shmop # cd /usr/local/src/php-/ext/shmop/ 二.执行phpize,生成配置 # phpize [root@bogon shmop]# ls acinclude.m4…
ftok函数 系统建立IPC通讯(消息队列.信号量和共享内存)时必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型 头文件: #include <sys/types.h> #include <sys/ipc.h> 如下: key_t ftok( char * fname, int id ) fname就是你指定的文件名(已经存在的文件名),一般使用当前目录,如: key = ftok(".", 1); 这样就是将fname设为当前目录.…
ipcs是Linux下显示进程间通信设施状态的工具.可以显示消息队列.共享内存和信号量的信息.对于程序员非常有用,普通的系统管理员一般用不到此指令. ipcs -q 查看系统使用的IPC队列资源 ipcs -m 查看系统使用的IPC共享内存资源 ipcs -s 查看系统使用的IPC信号量资源 ipcs -a命令可以查看当前使用的共享内存.消息队列及信号量所有信息 ipcs -p命令可以得到与共享内存.消息队列相关进程之间的消息 ipcs -u命令可以查看各个资源的使用总结信息,其中可以看到使用的…
#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>int main( void ){ int id=2; //char a[]="hello world"; //int k=ftok(a,id);//该文件必须是存在而且可以访问的,否则返回-1,函数执行失败 int k=ftok("myfile",id);//格式为:"文件名",文件名的路径…
看这题目就很乱,心情当然也是不怎么美好了.前一段时间做了一个项目,AIX(Unix的一种)中的一个系统向WINDOWS移植,开发环境由IBM的C/C++(叫什么忘记了,好像是xlC)变为VC++. 这是算过来,但是最近进程通信的信号量出了问题(也不算什么问题,就是全局信号量的名字应该怎么命名有点问题了.) AIX系统中,信号量的名字其实是key_s(本质就是int),key_s是通过ftok返回了.大概的逻辑就是指定一个系统中存在的文件,取文件的索引节点号的低24位,然后高8位使用偏移字段, 这…
System V IPC分为三种: System V消息队列 System V信号量 System V共享内存区 这三种类型的IPC使用key_t值做为它们的名字. key_t这个数据类型在<sys/types.h>有定义,通常是一个至少32位的整数. 我们通常使用ftok()函数(可以如此记忆:file to key)把一个已存在的路径名和一个整数标识符转换成一个key_t值,称为IPC键. (当然,我们也可以不用ftok函数来生成该键,指定一个整数也是可以的,当然你需要考虑键的正负问题).…
简单的说明 可能很少情况会使用PHP来操控共享内存,一方面在内存的控制上,MC已经提供了一套很好的方式,另一方面,自己来操控内存的难度较大,内存的读写与转存,包括后面可能会用到的存储策略,要是没有一定计算机组成原理的基础,想做这些不是一件容易的事情.那为什么还要使用它呢?如果我想进行管道通信,为其它的应用服务准备数据:我想建立自己的数据缓存体系,使用MC有点大炮打苍蝇的感觉.那么shmop会是一个选择,当然,在操作内存前,一定要谨慎. 系统要求 shmop系列函数只是在unix/Linux下可用…
$size = 1024*1024; $shm_key = ftok(__FILE__, 't'); $shm_id = shmop_open($shm_key, "c", 0644, $size); $id = sem_get($shm_key); $data = shmop_read($shm_id, 0, $size); $arr = array( 'time'=>time(), 'data'=>uniqid() ); $size = shmop_write($shm…
转载: http://www.cnblogs.com/hjslovewcl/archive/2011/03/03/2314344.html http://www.cnblogs.com/lihaozy/archive/2012/08/07/2626391.html 函数ftok把一个已存在的路径名和一个整数标识得转换成一个key_t值,称为IPC键: key_t ftok(const char *pathname, int proj_id); DESCRIPTION        The fto…
if (!function_exists('sem_get')) { function sem_get($key) { return fopen(__FILE__ . '.sem.' . $key, 'w+'); } function sem_acquire($sem_id) { return flock($sem_id, LOCK_EX); } function sem_release($sem_id) { return flock($sem_id, LOCK_UN); } }…
php多进程处理 往往我们会碰到一个情况,需要写一个脚本,这个脚本要处理的数据量极大,单进程处理脚本非常慢,那么这个时候就会想到使用多进程或者多线程的方式了. 我习惯使用多进程的方式,php中使用多进程的时候需要使用pcntl,pcntl的使用可以看这个PHP的pcntl多进程 但是这里有一个问题,一个主进程把任务分成n个部分,然后把任务分配给多个子进程,但是任务可能是有返回值的,所有的子进程处理完返回值以后需要把返回值返回给主进程. 这个就涉及到了进程间通信了.进程间通信可以使用的方法当然很多…
php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a/mirror 直接下载地址 http://cn2.php.net/distributions/php-7.0.3.tar.gz 下载解压目录 /usr/local/php7.0.3 下载php压缩包    wget http://cn2.php.net/distributions/php-7.0.…
一.进程间通信        linux下面提供了多种进程间通信的方法, 管道.信号.信号量.消息队列.共享内存.套接字等.下面我们分别 介绍管道.信号量.消息队列.共享内存.        信号和套接字在后续介绍.   1.管道     管道又分为无名管道.命名管道.   无名管道用于父子进程间通信, 而命名管道则可以用于同一计算机上运行的 两个进程间的通信.管道可以用类似“水管”的原理来理解.   1)无名管道     要在父子进程进程间使用管道进行通信,那么先需要创建管道, 在linux中…
编译安装php参考资料 MySQL PHP API http://dev.mysql.com/doc/apis-php/en/index.html nginx + php +mysql 最简单安装 官方介绍 http://php.net/manual/zh/install.unix.nginx.php php下载地址: http://cn2.php.net/distributions/php-5.6.7.tar.gz 编译php环境需要的包 autoconf: 2.13+(PHP < 5.4.0…
php多进程处理 往往我们会碰到一个情况,需要写一个脚本,这个脚本要处理的数据量极大,单进程处理脚本非常慢,那么这个时候就会想到使用多进程或者多线程的方式了. 我习惯使用多进程的方式,php中使用多进程的时候需要使用pcntl,pcntl的使用可以看这个PHP的pcntl多进程 但是这里有一个问题,一个主进程把任务分成n个部分,然后把任务分配给多个子进程,但是任务可能是有返回值的,所有的子进程处理完返回值以后需要把返回值返回给主进程. 这个就涉及到了进程间通信了.进程间通信可以使用的方法当然很多…
phpize扩展php模块 phpize 所在目录 /usr/etc/php/bin/phpize 查看当前php配置情况 /usr/etc/php/bin/下面的php [root@localhost bin]cd /usr/etc/php/bin [root@localhost bin]# ./php -i | grep configure Configure Command => './configure' '--prefix=/usr/etc/php' '--with-config-fi…
php网址 http://php.net/downloads.php 首先下载 php-5.6.5.tar.gz [root@localhost src]# wget http://cn2.php.net/distributions/php-5.6.5.tar.gz --2015-01-24 18:51:49-- http://cn2.php.net/distributions/php-5.6.5.tar.gz 正在解析主机 cn2.php.net (cn2.php.net)... 202.10…
===== https://blog.eood.cn/php_share_memory 最常见的apc 可以缓存php的opcode提高应用的性能,可以在同个php-fpm进程池间共享数据 常见功能: apc_store apc_fetch apc_add apc_delete apc_inc apc_dec apc_cas apc_clear_cache apc_sma_info 2,shmod unix 系统共享内存使用接口 常见功能 shmop_open shmop_close shmop…
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程 (APUE)…
利用PHP操作Linux消息队列完成进程间通信 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS[原创] Redis队列——PHP操作简单示例 入队操作 <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); while(True){ try{ $value = 'value_'.date('Y-m-d H:i:s'); $redis->LPUSH('key1',$value); sleep(rand()%3)…