这篇文章主要围绕深入理解PHP之源码目录结构与功能说明和php文件目录源码展开,旨在为您提供一份详细的参考资料。我们将全面介绍深入理解PHP之源码目录结构与功能说明的优缺点,解答php文件目录源码的相
这篇文章主要围绕深入理解PHP之源码目录结构与功能说明和php文件目录源码展开,旨在为您提供一份详细的参考资料。我们将全面介绍深入理解PHP之源码目录结构与功能说明的优缺点,解答php文件目录源码的相关问题,同时也会为您带来HarmonyOS 源码目录结构的理解、linux 源码目录结构 文件系统目录结构、PHP7内核(三):源码目录结构、PHP之源码目录结构的实用方法。
本文目录一览:深入理解PHP之源码目录结构与功能说明(php文件目录源码)
本文讲述了PHP源码目录结构与功能说明。分享给大家供大家参考,具体如下:
PHP之所以能在web开发语言中排名靠前,不仅仅是因为语法简单,上手容易。我个人认为更多是因为其语言本身的:模块的易扩展性,可维护性以及内存安全管理等特点。写过PHP的程序员不一定都知道:PHP是如何执行的?其组织结构目录的作用?如果对其有所了解,对PHP的认识会更深入,写出的代码也会更高效,更健壮......
1. build 和编译有关的目录。
2. ext 扩展库代码,例如 MySQL、zlib、iconv 等我们熟悉的扩展库。其中/ext/standard/ 目录下是常用的标准函数集。
3. main 主目录包含主要的 PHP 宏和定义。
4. sapi 和各种服务器的接口调用,例如apache、IIS等,也包含一般的fastcgi、cgi等。
5. win32 和 Windows 下编译 PHP 有关的脚本。
6. Zend 文件夹核心的引擎,所有的 Zend API 定义与宏等。
7. scripts Linux 下的脚本目录。
8. tests 测试脚本目录
9. sapi 各类 Web 服务器的接口。
10.TSRM Zend 和 PHP 的 “线程安全资源管理器” (TSRM) 目录。
11.pear 这个目录就是“PHP 扩展与应用仓库”的目录。包含了PEAR 的核心文件。
其中几个重要的文件绝对值得你共时间去了解:
php-src/main/php.h, 位于PHP 主目录。这个文件包含了绝大部分 PHP 宏及 API 定义。
php-src/Zend/zend.h, 位于 Zend 主目录。这个文件包含了绝大部分 Zend 宏及 API 定义。
php-src/Zend/zend_API.h, 也位于 Zend 主目录,包含了Zend API 的定义
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数学运算技巧总结》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
- php源码加密 仿微盾PHP加密专家(PHPCodeLock)
- PHP源码之 ext/mysql扩展部分
- 修改Zend引擎实现PHP源码加密的原理及实践
- 学习php开源项目的源码指南
- 深入理解PHP原理之执行周期分析
- 深入理解PHP之OpCode原理详解
- PHP的运行机制与原理(底层)
- 深入理解PHP原理之异常机制
- PHP原理之异常机制深入分析
HarmonyOS 源码目录结构的理解
目录:
applications
base
Foundtion
utils
kernel
drivers
原文 PDF 文件
本文目的:梳理 HarmonyOS 源码目录结构,介绍重要目录包含的内容与作用,便于学习开发过程有全局观,有针对性的研读开发。
HarmonyOS 源码文件之多,想要短时间内研读完成是比较困难的。对于我们刚刚学习此操作系统的开发来说,如果一个个目录去研读代码,需要花费大量的时间。本文从框架上简单解析 HarmonyOS 的目录结构,让开发者有针对性的研究它。
下图将 HarmonyOS 源码的一级目录通过软件层进行了简单区分,可以结合 HarmonyOS 架构图一起从整体要认识 HarmonyOS 目录结构。
HarmonyOS 架构图中表述的应用框架层和系统服务层,都可以理解为 Farmwork 层,是 Harmony 最重要,也是最核心的部分。
接着谈谈我们对每个目录的简单认识:
applications
从字面上解读,主要存放用户的应用程序,或是是 HarmonyOS 预置的系统应用程序。
applications
|
|——sample // 提供 Hi3516/Hi3518/Hi3861 基础应用,这些应用应用预置设备中
|
|——camera // 主要说明 Hi35xx AI Camera 的基础应用
| |
| |——app // 此目录为用户自己开发的目录,可以通过该目录下的 BUILD.gn 文件适配是否要预置到系统中
| |——communication // 通话模块(hostapd wpa_cli wpa_supplicant)
| |——example // 示例模块
| |——hap // 预置的 app,HarmonyOS 中的 hap 对应 Android 中的 app
| |——media // 视频模块实例
|——wifi-iot
|
——app // 此目录为用户自己开发的目录,可以通过该目录下的 BUILD.gn 文件适配是否
要预置到系统中 (建议 IoT 开发预置 led_example, 便于开箱检查产品)
对应的代码仓包含有:
applications/sample/camera: https://gitee.com/openharmony/applications_sample_camera
applications/sample/wifi-iot:https://gitee.com/openharmony/applications_sample_wifi_iot/
base
HarmonyOS Framework 基础能力集合,定位于大多数设备开发都需要能力模块,目前提供了全球化、DFX、安全、系统启动等模块
base
|
|——global // 全球化模块,作为设备的基础能力模块,当然也可裁剪掉
| |
| |——frameworks // 全球化资源调度模块
| |——interfaces // 全球化资源调度系统间开放 APIs
|——hiviewdfx // DFX 模块
| |
| |——frameworks
| | |
| | |——ddrdump_lite // 轻量级设备 Dump 信息存储模块,目前暂时没有内容
| | |——hievent_lite // 轻量级设备 DFX-MCU/CPU 事件记录模块
| | |——hilog_lite // 轻量级设备 DFX-MCU/CPU 日志模块
| |——interfaces
| | |
| | |——innerkits // DFX 模块(日志、事件)内部接口
| | |——kits // DFX 模块(日志、事件)APIs
| |——services // DFX-MUC 框架 / 日志服务功能模块 Services
| |——utils // DFX-MCU 基础组件
|——iot_hardware // IoT 外设能力模块(GPIO/I2C/SPI/AD/DA 等)
| |
| |——frameworks
| | |
| | ——wifiiot_lite // IoT 外设模块实现 (包含.c 文件)
| |——hals
| | |
| | ——wifiiot_lite // HAL adapter 接口(为 frameworks 与驱动层提供适配)
| |——interfaces
| |
| ——kits // IoT 外设控制模块接口,与 frameworks/wifiiot_lite 配合
|——security
| |
| |——frameworks
| | |
| | |——app_verify //hap 包签名校验模块
| | |——crypto_lite // 加解密模块
| | |——hichainsdk_lite // 设备认证模块
| | |——huks_lite // 秘钥与证书管理模块
| | |——secure_os //libteec 库函数实现,提供 TEE Client APIs
| |——interfaces
| | |
| | |——innerkits // 内部接口目录,与 frameworks 对应
| | |——kits // 模块 APIs (应用权限管理)
| |——services
| |
| |——iam_lite // 应用权限管理及 IPC 通信鉴权服务
| |——secure_os //secure_os TEE 代理服务
|——startup
|
|——frameworks
| |
| ——syspara_lite // 系统属性模块源文件 (param_impl_hal-Cortex-M,param_impl_posix-Cortex-A)
|——hals
| |
| ——syspara_lite // 系统属性模块文文件
|——interfaces
| |
| ——kits // 系统属性模块对外 APIs
|——services
|
|——appspawn_lite // 应用孵化模块
|——bootstrap_lite // 启动服务模块
|——init_lite // 启动引导模块
interfaces 提供内外部 APIs
frameworks 提供接口实现的源代码;
hals:HAL adapter 接口(为 frameworks 与驱动层提供适配)
services: 通过服务管理模块
查看更多章节 >>>
想了解更多内容,请访问: 51CTO 和华为官方战略合作共建的鸿蒙技术社区 https://harmonyos.51cto.com/
linux 源码目录结构 文件系统目录结构
学习Linux也有一段时间了,具体来整理一下Linux源码的目录结构和文件系统的目录结构,以便加深记忆。
一、Linux源码的目录结构
首先上一张截图,如下所示:
再看各个文件的介绍,借用一下其他资源。
arch:这个为目录是架构相关,里面存放了许多cpu架构,比如arm,x86,MIPS,PPC等,
处理器原厂提供一套Linux内核的源码,那么在这个目录下都有一套针对具体处理器cpu的子目录。每个cpu的子目录,又进一步分解为boot,mm,kernel等子目录,分别控制系统引导,内存管理,系统调用,动态调频,主频率设置部分等。
在arch目录中有关键的平台文件。任何一款支持Linux的处理器,都有一部分内核代码是针对特定的处理器来提供的,具体的实现就是通过平台文件。
迅为4412的平台文件,是arch→arm→mach-exynos→mach-itop4412.c。
arch→arm→boot目录,默认编译生成的内核镜像是在这个目录下。
在arch→arm→kernel目录中,有针对具体cpu处理器的代码,有相关内核特性实现方式,如信号处理等。这一部分当然是芯片厂商做好了,4412的这部分就是三星已经做好的部分。
在arch→arm→lib目录中,有一些和硬件相关库函数,后面学习驱动的时候会使用到。
在arch→arm→tools目录中,包含了生成镜像的工具。
block:在linux中block表示块设备(以块(多个字节组成的整体,类似于扇区)为单位来整体访问),譬如说SD卡、iNand、Nand、硬盘等都是块设备。你几乎可以认为块设备就是存储设备。block目录下放的是一些linux存储体系中关于块设备管理的代码。
crypto:英文意思是加密。这个目录下放了一些各种常见的加密算法的C语言代码实现。譬如crc32、md5、sha1等。
Documentation:里面放了一些文档。
drivers:驱动目录,里面分门别类的列出了linux内核支持的所有硬件设备的驱动源代码。就是需要重点学习的部分。
firmware:固件。什么是固件?固件其实是软件,不过这个软件是固话到IC里面运行的叫固件:就像S5PV210里的iROM代码。
fs:fs就是file system,文件系统,里面列出了linux支持的各种文件系统的实现。
include:头文件目录,公共的(各种cpu架构共用的)头文件都在这里。每种cpu架构特有的一些头文件在arch/arm/include目录及其子目录下。
init:init是初始化的意思,这个目录下的代码就是linux内核启动时初始化内核的代码。
如下图所示,部分目录如下。下面的这些目录,几乎不需要我们去动其中任何一个文件。
ipc:ipc就是inter process commuication,进程间通信,里面都是linux支持的IPC的代码实现。
kernel:kernel就是内核,就是linux内核,所以这个文件夹下放的就是内核本身需要的一些代码文件。
lib:lib是库的意思,这里面都是一些公用的有用的库函数,注意这里的库函数和C语言的库函数不一样的。在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。譬如在内核中要把字符串转成数字用atoi,但是内核编程中只能用lib目录下的atoi函数,不能用标准C语言库中的atoi。譬如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。
mm:mm是memory management,内存管理,linux的内存管理代码都在这里。
net:该目录下是网络相关的代码,譬如TCP/IP协议栈等都在这里。
scripts:脚本,这个目录下全部是脚本文件,这些脚本文件不是linux内核工作时使用的,而是用来辅助对linux内核进行配置编译生产的。我们并不会详细进入分析这个目录下的脚本,而是通过外围来重点学会配置和编译linux内核即可。
security:安全相关的代码。不用去管。
sound:音频处理相关的。
tools:linux中用到的一些有用工具
usr:目录下是initramfs相关的,和linux内核的启动有关,暂时不用去管。
virt:内核虚拟机相关的,暂时不用管。
Kbuild:Kbuild是kernel build的意思,就是内核编译的意思。这个文件就是linux内核特有的内核编译体系需要用到的文件。
Makefile:这个是linux内核的总makefile,整个内核工程用这个Makefile来管理的。
二、文件系统目录结构
先上图,如下图所示:
1、/- 根
每一个文件和目录从根目录开始。
只有root用户具有该目录下的写权限。请注意,/root是root用户的主目录,这与/.不一样
2、/bin中 - 用户二进制文件
包含二进制可执行文件。
在单用户模式下,你需要使用的常见Linux命令都位于此目录下。系统的所有用户使用的命令都设在这里。
例如:ps、ls、ping、grep、cp
3、/sbin目录 - 系统二进制文件
就像/bin,/sbin同样也包含二进制可执行文件。
但是,在这个目录下的linux命令通常由系统管理员使用,对系统进行维护。例如:iptables、reboot、fdisk、ifconfig、swapon命令
4、/etc - 配置文件
包含所有程序所需的配置文件。
也包含了用于启动/停止单个程序的启动和关闭shell脚本。例如:/etc/resolv.conf、/etc/logrotate.conf
hosts:设备名称(或域名)到ip地址的解析,相当于本地存在的dns功能。
5、/dev - 设备文件
包含设备文件。
这些包括终端设备、USB或连接到系统的任何设备。例如:/dev/tty1、/dev/usbmon0
6、/proc - 进程信息
包含系统进程的相关信息。
这是一个虚拟的文件系统,包含有关正在运行的进程的信息。例如:/proc/{pid}目录中包含的与特定pid相关的信息。
这是一个虚拟的文件系统,系统资源以文本信息形式存在。例如:/proc/uptime
7、/var - 变量文件
var代表变量文件。
这个目录下可以找到内容可能增长的文件。
这包括 - 系统日志文件(/var/log);包和数据库文件(/var/lib);电子邮件(/var/mail);打印队列(/var/spool);锁文件(/var/lock);多次重新启动需要的临时文件(/var/tmp);
8、/tmp - 临时文件
包含系统和用户创建的临时文件。
当系统重新启动时,这个目录下的文件都将被删除。
9、/usr - 用户程序
包含二进制文件、库文件、文档和二级程序的源代码。
/usr/bin中包含用户程序的二进制文件。如果你在/bin中找不到用户二进制文件,到/usr/bin目录看看。例如:at、awk、cc、less、scp。
/usr/sbin中包含系统管理员的二进制文件。如果你在/sbin中找不到系统二进制文件,到/usr/sbin目录看看。例如:atd、cron、sshd、useradd、userdel。
/usr/lib中包含了/usr/bin和/usr/sbin用到的库。
/usr/local中包含了从源安装的用户程序。例如,当你从源安装Apache,它会在/usr/local/apache2中
10、/home - HOME目录
所有用户用home目录来存储他们的个人档案。
例如:/home/john、/home/nikita
11、/boot - 引导加载程序文件
包含引导加载程序相关的文件。
内核的initrd、vmlinux、grub文件位于/boot下。
例如:initrd.img-2.6.32-24-generic、vmlinuz-2.6.32-24-generic
12、/lib - 系统库
包含支持位于/bin和/sbin下的二进制文件的库文件.
库文件名为 ld*或lib*.so.*
例如:ld-2.11.1.so,libncurses.so.5.7
13、/opt - 可选的附加应用程序
opt代表可选的。
包含从个别厂商的附加应用程序。
附加应用程序应该安装在/opt/或者/opt/的子目录下。
14、/mnt - 挂载目录
临时安装目录,系统管理员可以挂载文件系统。15、/media - 可移动媒体设备
用于挂载可移动设备的临时目录。
举例来说,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy;16、/srv - 服务数据
srv代表服务。
包含服务器特定服务相关的数据。
例如,/srv/cvs包含cvs相关的数据。
PHP7内核(三):源码目录结构
上篇文章我们已经介绍了源码分析工具的安装、配置以及调试方法,本文我们来讲述一下PHP源码的目录结构。
一、目录概览
以php-7.0.12
为例,看过源码的同学们应该发现源码目录多达十多个,下面是每个目录的说明。
目录 | 说明 |
---|---|
TSRM | 线程相关安全的实现 |
Zend | PHP解析器的核心实现 |
build | linux下编译相关的目录 |
ext | PHP的扩展 |
main | PHP的主要代码 |
netware | 网络目录,socket的定义与实现 |
pear | PHP扩展及应用的代码仓库 |
sapi | PHP的应用层接口 |
scripts | Linux下的脚本目录 |
tests | 测试脚本目录 |
travis | 用于构建,非PHP特有目录 |
win32 | Windows下编译PHP的相关脚本 |
二、核心目录
虽然源码目录众多,但是核心目录却只有sapi、main、zend、ext、TSRM
。
2.1、SAPI
还记得PHP的应用场景吗?我们可以在命令行中访问PHP,也可以通过浏览器访问PHP脚本,甚至可以嵌入到单片机供C、C++程序调用。它们分别对应cli模式、fpm/cgi模式、embed模式,除了这些还有apache2handler、litespeed模式。
SAPI全称Server API,负责PHP对外提供服务规范,它定义了结构体sapi_module_struct
,该结构体定义了模式启动、关闭、激活、失效等多个钩子函数指针,每个模式将这些函数指针指向自己的函数,就可以轻松扩展PHP对外服务的方式。以上几种模式也正是实现了sapi_module_strcut
才完成了PHP的多场景应用。
2.2、main
main目录的作用是承接SAPI的请求,分析出要执行的脚本文件和参数,并对环境和配置进行初始化,比如初始化变量和常量、注册函数、解析配置文件、加载扩展等等。
2.3、Zend
Zend目录就是大家所熟知的Zend引擎,是PHP最核心的部分,主要负责PHP的语法实现、内存管理及脚本的编译运行环境等,它由编译器、执行器两部分组成。
编译器负责将PHP代码进行词法、语法分析,并生成抽象语法树,然后进一步编译为opcode,opcode是Zend虚拟机可识别的指令,php7一共有173个opcode,所有的语法都是由这些opcode组成的。执行器负责执行编译器输出的opcode。
2.4、ext
ext是extension的缩写,它是扩展PHP内核功能的一种方式,分为PHP扩展与zend扩展,都支持用户自定义开发,这两种都比较常见,PHP扩展有gd、json、date、array等,而我们熟知的opcache就是Zend扩展。
2.5、TSRM
TSRM全称叫做Thread Safe Resource Manager,也就是线程安全资源管理器。
我们知道,全局变量就是定义在函数外的变量,它属于公共资源,在多线程的环境下,访问公共资源就可能会引起冲突,TSRM就是为解决该问题而诞生的。它为每个线程分配一个独立的自增ID,该ID作为当前线程的全局变量内存区的索引,从而实现线程的完全独立。
其实PHP大部分SAPI都是单线程的,所以并不需要过多关注线程安全,但是在Apache或者用户自己实现的PHP环境下,就需要考虑线程安全问题了。
PHP之源码目录结构
PHP之所以能在web开发语言中排名靠前,不仅仅是因为语法简单,上手容易。我个人认为更多是因为其语言本身的:模块的易扩展性,可维护性以及内存安全管理等特点。写过PHP的程序员不一定都知道:PHP是如何执行的?其组织结构目录的作用?如果对其有所了解,对PHP的认识会更深入,写出的代码也会更高效,更健壮......
1. build 和编译有关的目录。
2. ext 扩展库代码,例如 mysql、zlib、iconv 等我们熟悉的扩展库。其中/ext/standard/ 目录下是常用的标准函数集。
3. main 主目录包含主要的 PHP 宏和定义。
4. sapi 和各种服务器的接口调用,例如apache、IIS等,也包含一般的fastcgi、cgi等。
5. win32 和 Windows 下编译 PHP 有关的脚本。
6. Zend 文件夹核心的引擎,所有的 Zend API 定义与宏等。
7. scripts Linux 下的脚本目录。
8. tests 测试脚本目录
9. sapi 各类 Web 服务器的接口。
10.TSRM Zend 和 PHP 的 “线程安全资源管理器” (TSRM) 目录。
11.pear 这个目录就是“PHP 扩展与应用仓库”的目录。包含了PEAR 的核心文件。
其中几个重要的文件绝对值得你共时间去了解:
php-src/main/php.h, 位于PHP 主目录。这个文件包含了绝大部分 PHP 宏及 API 定义。
php-src/Zend/zend.h, 位于 Zend 主目录。这个文件包含了绝大部分 Zend 宏及 API 定义。
php-src/Zend/zend_API.h, 也位于 Zend 主目录,包含了Zend API 的定义
原文链接: http://blog.csdn.net/21aspnet/article/details/6558211
今天关于深入理解PHP之源码目录结构与功能说明和php文件目录源码的介绍到此结束,谢谢您的阅读,有关HarmonyOS 源码目录结构的理解、linux 源码目录结构 文件系统目录结构、PHP7内核(三):源码目录结构、PHP之源码目录结构等更多相关知识的信息可以在本站进行查询。
本文标签: