[李景山php] 扩展解析

// 包含 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; // 返回成功
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值