php扩展多进程共享内存
来源:互联网 发布:c4d注册机mac版百度云 编辑:程序博客网 时间:2024/04/29 19:10
步骤:
1.运行命令:./ext_skel --extname=sharemem
2.运行命令:./configure --with-php-config=/usr/local/lnmp/php/bin/php-config
3.make clean
make
make install
/usr/local/lnmp/php/sbin/php-fpm restart
/usr/local/lnmp/php/bin/php-cgi /data0/htdocs/blog/sharemem.php
代码如下:
1.config.m4
PHP_ARG_ENABLE(sharemem, whether to enable sharemem support,
Make sure that the comment is aligned:
[ --enable-sharemem Enable sharemem support])
if test "$PHP_SHAREMEM" != "no"; then
PHP_NEW_EXTENSION(sharemem, sharemem.c, $ext_shared)
fi
2.php_sharemem.h
#ifndef PHP_SHAREMEM_H
#define PHP_SHAREMEM_H
extern zend_module_entry sharemem_module_entry;
#define phpext_sharemem_ptr &sharemem_module_entry
#ifdef PHP_WIN32
#define PHP_SHAREMEM_API __declspec(dllexport)
#else
#define PHP_SHAREMEM_API
#endif
#ifdef ZTS
#include "TSRM.h"
#endif
/*hanhhh*/
#include "sys/mman.h"
#include "fcntl.h"
#include "semaphore.h"
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/*hanhhh*/
typedef struct php_shared_mm {
sem_t mutex; /* the mutex: a Posix memory-based semaphore */
int count; /* and the counter */
} php_shared_mm;
PHP_MINFO_FUNCTION(sharemem);
PHP_FUNCTION(say8_count_add); /* For testing, remove later. */
PHP_FUNCTION(say8_count_dec); /* For testing, remove later. */
#endif /* PHP_SHAREMEM_H */
3.sharemem.c
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_sharemem.h"
zend_function_entry sharemem_functions[] = {
PHP_FE(say8_count_add, NULL)
PHP_FE(say8_count_dec, NULL)
{NULL, NULL, NULL} /* Must be the last line in sharemem_functions[] */
};
/* }}} */
/* {{{ sharemem_module_entry
*/
zend_module_entry sharemem_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
"sharemem",
sharemem_functions,
NULL,
NULL,
NULL, /* Replace with NULL if there's nothing to do at request start */
NULL, /* Replace with NULL if there's nothing to do at request end */
PHP_MINFO(sharemem),
#if ZEND_MODULE_API_NO >= 20010901
"0.1", /* Replace with version number for your extension */
#endif
STANDARD_MODULE_PROPERTIES
};
/* }}} */
#ifdef COMPILE_DL_SHAREMEM
ZEND_GET_MODULE(sharemem)
#endif
/* {{{ PHP_MINFO_FUNCTION
*/
PHP_MINFO_FUNCTION(sharemem)
{
php_info_print_table_start();
php_info_print_table_header(2, "sharemem support", "enabled");
php_info_print_table_end();
}
/* }}} */
PHP_FUNCTION(say8_count_add){
int fd;
struct php_shared_mm *ptr;
fd = open("/tmp/xx", O_RDWR, FILE_MODE);
if(fd < 0)
{
fd = open("/tmp/xx", O_RDWR|O_CREAT, FILE_MODE);
assert(fd > 0);
ftruncate(fd, sizeof(struct php_shared_mm));
//write(fd, &php_shared_mm, sizeof(struct php_shared_mm));
}
ptr =(struct php_shared_mm *) mmap(NULL, sizeof(struct php_shared_mm), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
assert(sem_init(&ptr->mutex, 1, 1) == 0);
setbuf(stdout, NULL);
assert(sem_wait(&ptr->mutex) >=0 );
ptr->count++;
// printf ( "%d/n", ptr->count );
assert(sem_post(&ptr->mutex) >=0 );
// usleep(90000);
RETURN_LONG(ptr->count);
RETURN_TRUE;
}
PHP_FUNCTION(say8_count_dec){
int fd;
struct php_shared_mm *ptr;
fd = open("/tmp/xx", O_RDWR, FILE_MODE);
if(fd < 0)
{
fd = open("/tmp/xx", O_RDWR|O_CREAT, FILE_MODE);
assert(fd > 0);
ftruncate(fd, sizeof(struct php_shared_mm));
//write(fd, &php_shared_mm, sizeof(struct php_shared_mm));
}
ptr =(struct php_shared_mm *) mmap(NULL, sizeof(struct php_shared_mm), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
assert(sem_init(&ptr->mutex, 1, 1) == 0);
setbuf(stdout, NULL);
assert(sem_wait(&ptr->mutex) >=0 );
ptr->count--;
// printf ( "%d/n", ptr->count );
assert(sem_post(&ptr->mutex) >=0 );
// usleep(90000);
RETURN_LONG(ptr->count);
RETURN_TRUE;
}
- php扩展多进程共享内存
- 多进程访问共享内存
- linux多进程共享内存
- python多进程共享内存
- 多进程锁、共享内存
- 共享内存的扩展
- 多进程共享内存一些感受
- 多进程通信(IPC)--共享内存
- 【Linux多进程通信】共享内存
- 多进程+共享内存+信号量综合实例
- 多进程、共享内存的网络聊天室
- 多进程共享内存续篇-大锁
- 多进程锁和共享内存
- 进程通信--共享内存
- 进程通信-共享内存 .
- 进程共享同内存
- 进程间共享内存
- 进程通信-----共享内存
- S3C2416 Pwm 背光控制
- 接口、抽象类、抽象方法、虚方法 的区别
- asp.net 服务端的文件管理器
- QT4通过ODBC访问Sybase
- 怎样将UIImage对象保存到JPG或者PNG文件中?
- php扩展多进程共享内存
- MFC中CMainFrame类CDoc类CView类CApp类之间关系
- [PKU 2976]Dropping tests(分数规划)
- Xp系统下sqlServer 2000中1433端口打不开的问题
- JS验证框架
- Android自动化测试初探(二): Hierarchyviewer 捕获Element的实现原理
- C# 教程读书笔记
- 终于会写makefile 了。晒一个gtk连接数据库的登录窗口程序
- js 验证码的苦恼