// 包含 php 系列配套文件
#ifdef HAVE_CONFIG_H
#include "config.h" // 包含配置文件
#endif
#include "php.h" // 包含 php的头文件
#include "php_ini.h" // 包含php初始化配置文件
#include "ext/standard/info.h" // 包含标准扩展头信息
#include "php_dio.h"// 包含自己扩展的头文件
// 包含 C语言需要的 库文件
#include <sys/stat.h> // 包含 stat 文件
#include <sys/types.h>// 包含 types 文件
#ifdef HAVE_UNISTD_H // 包含 unistd 文件
#include <unistd.h> // 包含 unistd 头文件
#endif
#include <fcntl.h>// 包含控制文件
#ifndef PHP_WIN32
#include <termios.h> // 包含 termios.h 如果是 PHP_WIN32 程序
#endif
/* e.g. IRIX does not have CRTSCTS */
#ifndef CRTSCTS// 定义了 CRTSCTS
# ifdef CNEW_RTSCTS // 定义 CNEW_RTSCTS 类型
# define CRTSCTS CNEW_RTSCTS
# else
# define CRTSCTS 0
# endif /* CNEW_RTSCTS */
#endif /* !CRTSCTS */
#define le_fd_name "Direct I/O File Descriptor" // 宏定义
static int le_fd;// 静态整型 类型
//function_entry 函数声明
function_entry dio_functions[] = { // 函数声明
PHP_FE(dio_open, NULL) // 定义 dio_open
#ifndef PHP_WIN32 // 如果是 PHP_WIN32
PHP_FE(dio_truncate, NULL) // 定义 dio_truncate
#endif
PHP_FE(dio_stat, NULL) // 定义 dio_stat
PHP_FE(dio_seek, NULL) // 定义 dio_seek
#ifndef PHP_WIN32
PHP_FE(dio_fcntl, NULL) // 定义 dio_fcntl
#endif
PHP_FE(dio_read, NULL) // 定义 dio_read
PHP_FE(dio_write, NULL) // 定义 dio_write
PHP_FE(dio_close, NULL) // 定义 dio_close
#ifndef PHP_WIN32
PHP_FE(dio_tcsetattr, NULL) // 定义 dio_tecsetattr
#endif
{NULL, NULL, NULL}
};
//zend_module_entry 模型初始化说明
zend_module_entry dio_module_entry = {
STANDARD_MODULE_HEADER,// 标准 头信息
"dio",// 自定义
dio_functions,// 自定义函数
PHP_MINIT(dio),// 初始化 MINIT 函数 dio
NULL,// 空
NULL, // 空
NULL,// 空
PHP_MINFO(dio),// 获取信息
PHP_DIO_VERSION,// DIO 版本信息
STANDARD_MODULE_PROPERTIES// 标准模块性能
};
#ifdef COMPILE_DL_DIO
ZEND_GET_MODULE(dio)// 包含系统类型
#endif
// _dio_close_fd 关闭函数,
// zend_rsrc_list_entry 系统资源
// 线程安全问题 TSRMLS_DC
static void _dio_close_fd(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
php_fd_t *f = (php_fd_t *) rsrc->ptr;
if (f) {
close(f->fd);
free(f);
}
}// 此函数 默认的功能,就是 释放php分配的系统资源。
#define RDIOC(c) REGISTER_LONG_CONSTANT(#c, c, CONST_CS | CONST_PERSISTENT)
#define DIO_UNDEF_CONST -1
// 各种宏定义
// 各种宏定义 类型
PHP_MINIT_FUNCTION(dio)
{// 初始化 dio 数据
le_fd = zend_register_list_destructors_ex(_dio_close_fd, NULL, le_fd_name, module_number);
// 新的函数,资源类型的创建
RDIOC(O_RDONLY);// 文件操作声明 默认
RDIOC(O_WRONLY);
RDIOC(O_RDWR);
RDIOC(O_CREAT);
RDIOC(O_EXCL);
RDIOC(O_TRUNC);
RDIOC(O_APPEND);
#ifdef O_NONBLOCK // 情况1
RDIOC(O_NONBLOCK);
#endif
#ifdef O_NDELAY // 情况2
RDIOC(O_NDELAY);
#endif
#ifdef O_SYNC // 情况3
RDIOC(O_SYNC);
#endif
#ifdef O_ASYNC // 情况4
RDIOC(O_ASYNC);
#endif
#ifdef O_NOCTTY // 情况 5
RDIOC(O_NOCTTY);
#endif
#ifndef PHP_WIN32 // 情况 6
RDIOC(S_IRWXU);
RDIOC(S_IRUSR);
RDIOC(S_IWUSR);
RDIOC(S_IXUSR);
RDIOC(S_IRWXG);
RDIOC(S_IRGRP);
RDIOC(S_IWGRP);
RDIOC(S_IXGRP);
RDIOC(S_IRWXO);
RDIOC(S_IROTH);
RDIOC(S_IWOTH);
RDIOC(S_IXOTH);
RDIOC(F_DUPFD);
RDIOC(F_GETFD);
RDIOC(F_GETFL);
RDIOC(F_SETFL);
RDIOC(F_GETLK);
RDIOC(F_SETLK);
RDIOC(F_SETLKW);
RDIOC(F_SETOWN);
RDIOC(F_GETOWN);
RDIOC(F_UNLCK);
RDIOC(F_RDLCK);
RDIOC(F_WRLCK);
#endif
return SUCCESS; // 返回成功
}
[李景山php] 扩展解析
最新推荐文章于 2024-04-23 22:47:07 发布