1. POSIX 接口 // 1. 如何看函数接口是否符合 POSIX 接口? 1 Executable programs or shell commands 2 System calls (functions provided by the kernel) // 符合 POSIX 3 Library calls (functions...
1. 传递指向常量的指针(3.2.3) /* 1. 指向常量的指针 & 常量指针 */ const int *p; // 指向常量的指针 int * const p; // 常量指针 /* 2. 常量取地址 */ const int limit = 100; // 常量 &limit // 传递给函数 or 赋值, 取指针应该为 指向常量的指针 // 举例...
1. 概览 1. nginx 模块分类 // 25.8.14 补充 《深入理解nginx》书中, Nginx源码中明确标记为NGX_CORE_MODULE类型的模块只有以下6个,它们是Nginx运行的最底层基础: Nginx的核心模块采用分层架构设计,每个核心模块不仅是功能实现者,更是模块类型的管理者。ngx_events_module、ngx_http_module和ngx_m...
1. Upstream 1.1 总览 结构概览 // 1. ngx_http_mytest_handler(ngx_http_request_t * r) // 2. typedef struct ngx_http_request_s ngx_http_request_t; // 3. struct ngx_http_request_s { ... ng...
1. ngx_command_t 1.1 示例 static ngx_command_t ngx_http_mytest_commands[] = { { ngx_string("test_flag"), NGX_HTTP_LOC_CONF ...
1. ngx_str_t typedef struct { size_t len; u_char *data; } ngx_str_t; 2. ngx_list_part_t // 分段链表 typedef struct ngx_list_part_s ngx_list_part_t; struct ngx_list_part_s { ...
C 中extern 关键字? extern 用于声明一个变量或函数是“外部的”,也就是在其他文件中定义的。它不会分配内存,只是告诉编译器这个变量或函数在其他文件中定义,可以在当前文件中使用。 C 不存在global 关键字! 头文件编译链接问题 // test.c #include "cutil.h" int mai...
1. 装载时重定位的理解 1. 程序内存地址的不可预测性 在现代操作系统中,每个程序和共享库(如动态链接库)在启动时并不知道它们将被加载到哪一块内存区域。操作系统通过虚拟内存技术为每个进程分配独立的内存空间,虚拟地址空间对于每个进程来说是隔离的。 然而,程序代码和数据中很多地方都需要依赖内存地址来进行访问。例如,程序中的函数调用和全局变量都使用具体的内存地址。 但是,问题在于: ...
1. 从操作系统角度看看可执行文件的加载 1.1进程建立过程 1. 创建一个独立的虚拟地址空间 操作系统通过 execve() 系统调用为新进程创建一个干净的虚拟地址空间。 清理旧地址空间中的内容(如代码段、数据段、堆栈等)。 分配基本的地址空间结构,包括 用户态内存区域 和 内核态内存区域。 创建虚拟地址与物理地址的映射(可做) 2. 读取可执行文件头, 建立 ...
1. ELF 文件结构概览 ELF(Executable and Linkable Format)是一种常见的文件格式,用于可执行文件、目标文件、共享库和核心转储文件。其整体结构如下: ELF 文件的主要组成部分 ELF Header 描述文件的全局信息。 提供 Program Header Table 和 Section Header Table...