%%
# 纲要
> 主干纲要、Hint/线索/路标
# Q&A
#### 已明确
#### 待明确
> 当下仍存有的疑惑
**❓<font color="#c0504d"> 有什么问题?</font>**
# Buffer
## 闪念
> sudden idea
## 候选资料
> Read it later
# 0-MOC-库使用
- C++:
- [[02-开发笔记/01-cpp/库使用/c++ 常用头文件说明|c++ 常用头文件说明]]
- [[02-开发笔记/01-cpp/库使用/STL 标准模版库|STL 标准模版库]]
- 多线程 & 同步相关:
- [[02-开发笔记/05-操作系统/并发相关/POSIX 线程&同步 API|POSIX 线程&同步 API]]
- [[02-开发笔记/01-cpp/多线程并发相关/cpp-多线程&同步|cpp-多线程&同步]]
%%
> [!NOTE] C 与 C++ 标准库头文件的区别
>
> C++ **向后兼容地沿用了许多 C 的标准库头文件**:
> 这些标准库的名称**由 `*.h` 改为了 `c*`**(例如 `string.h => cstring`,`math.h => cmath`),同时这些 **C++标准头文件中的内容都被放置在了==命名空间== `std` 中**。(C 语言中没有命名空间的概念)
<br><br>
# C 标准库相关头文件 ⭐
C 标准库头文件概览如下,函数原型可参见[^1] [^2][^3]:
| 头文件 | 说明 | 备注 |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| `<stdio.h>` | - 提供**输入输出格式化**函数(`printf`, `scanf`, `sprintf`, `fprintf` 等) <br>- 提供**字符 I/O 函数**: `getc`, `putc` 等<br>- 提供**文件操作**:`fopen`, `flocse`, `fread`, `fwrite` <br>- 提供**管道通信**:`popen`, `pclose` <br>- 提供错误打印函数(`perror`) <br><br> | |
| `<stdlib.h>` | 提供以下几方面的函数: <br>- **内存分配**:`malloc`, `calloc`, `realloc` , `free` <br>- **程序退出**:`abort`, `exit`, `atexit` 等<br>- **字符串到数值转换**:`atoi`, `atof` , `strtol`, `strtod` <br>- 提供**环境变量和命令执行**相关函数:`system`, `getenv`, `putenv` 等 <br>- 随机数相关:`rand`, `srand` <br>- 排序搜索:`qsort`, `bsearch` <br>- 整数绝对值函数:`abs` <br><br> | |
| | | |
| `<string.h>` | - 提供**字符串操作**函数(`strcpy`, `strlen`, `strcmp` 等) <br>- 提供**底层内存操作**函数(`memcpy`,`memset`, `memmove` 等) | |
| `<ctype.h>` | 提供**字符类别测试和转换**函数(如 `isalpha`, `isdigit`, `toupper`, `tolower`等) | |
| `<wchar.h>` | 提供**宽字符处理**函数(`wprintf`, `wcslen`, `wcscpy` 等) | C99 引入 |
| `<wctype.h>` | 提供**宽字符分类和转换**函数(`iswalpah`, `towupper`等) | C99 引入 |
| | | |
| `<stddef.h>` | 定义了**标准类型及重要常量**(`size_t`, `ptrdiff_t`, `byte` , `NULL` 等) | |
| `<stdint.h>` | 定义了**标准整数类型**(`int32_t`,`uint64_t` 等) | C99 引入 |
| `<stdbool.h>` | 定义了 **bool 宏** 及常量(`bool`, `true`, `false`) | C99 引入 |
| `<float.h>` | 提供**浮点数相关的定义**,例如 `FLT_MAX`, `DBL_MIN` 等 | |
| `<limits.h>` | 定义了**各种类型的取值范围**,例如 `INT_MAX` 等 | |
| | | |
| `<math.h` | 提供**数学**函数(`fabs`, `pow`, `sqrt`, `sin`, `cos` 等) | |
| `<complex.h>` | 提供**复数运算函数** | C99 引入 |
| `<tgmath.h>` | 提供**泛型数学函数**(支持自动选择合适的数学函数处理不同类型(如浮点数、整数等) | C99 引入 |
| | | |
| `<fenv.h>` | 提供了**对浮点状态标志和控制模式的访问**。<br>例如,程序可以测试标志来判断浮点数运算过程中是否发生了溢出,或者设置控制模式来指定如何进行舍入 | C99 引入 |
| | | |
| `<time.h>` | 提供**日期和时间**操作(`time`, `localtime` , `difftime`, `strftime` 等) | |
| | | |
| `<signal.h>` | 提供**信号处理**函数(`signal`, `raise`, `sigaction` 等) | |
| | | |
| `<stdarg.h>` | 提供**处理变长参数列表的宏及函数**(`va_start`,`va_arg`,`va_end` 等) | |
| | | |
| `<error.h>` | 定义了**错误码**并提供相关函数( `errno`, `perror`, `strerror`) | |
| `<assert.h>` | 提供**断言宏** `assert` | |
| | | |
| `<local.h>` | 提供用于 "**本地化**" 的宏和函数(`setlocal`, `localeconv`, `LC_ALL`等) | |
| | | |
| `<setjmp.h>` | 提供 "**非本地跳转**" 函数(`setjump`, `longjmp`),支持从深层嵌套函数中返回 | |
| | | |
| `<stdatomic.h>` | 定义了**现有数据类型的原子类型**,并提供了大量的宏用于**执行原子类型变量的初始化和读写操作** | C11 引入 |
| `<threads.h>` | 提供了线程的创建和管理函数,以及互斥锁、条件变量和线程局部存储的功能 | C11 引入 |
| `<stdalign.h>` | 提供了**数据对齐**功能 | C11 引入 |
| `<uchar.h>` | 定义了新的宽字符类型 `char16_t` 和 `char32_t`,并提供了从多字节字符到这些宽字符类型的转换函数 | C11 引入 |
| `<stdnoreturn.h>` | 只定义了一个宏 noreturn | C11 引入 |
<br><br><br>
# POSIX 库相关头文件 ⭐
> [!faq] ❓ <font color="#c00000">"POSIX 库" 与 "C 标准库" 有什么关联与区别?</font>
>
> POSIX 库是 **C 标准库的超集** ,其中不属于 C 标准库的部分**只适用于 "Unix-like" 操作系统** [^4] [^5] [^6] [^7]。
POSIX 库头文件概览(排除 C 标准库头文件)[^8] :
| 头文件 | 说明 |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `<unistd.h>` | 提供一系列**POSIX API**,包括: <br>- 文件操作::`read()`、`write()`、`close()`; <br>- 进程管理:`fork()`、`exec()`、`getpid()`、`getppid()`、`sleep()` 等 <br>- 管道:`pipe()`、<br>- 内存管理(`brk`, `sbrk`, 用于调整数据段大小) <br>- 标准 I/O 的文件描述符常量:`STDIN_FILENO`, `STDOUT_FILENO` , `STDERR_FILENO` <br>- 线程休眠 `sleep` |
| | |
| `<fcntl.h>` | 提供**文件控制**接口,包括打开文件、打开属性等(`open`, `fcntl`) |
| `<dirent.h>` | 提供**目录操作**接口,如 `opendir`、`readdir` 、`closedir`等 |
| `<sys/stat.h>` | 提供与**文件状态和权限**相关的接口(`stat`, `fstat`, `chmod` 等) |
| | |
| `<sys/types.h>` | 定义了**基本系统数据类型**(`pid_t`, `uid_t`, `ptrdiff_t`, `pthread_t`, `size_t` ,等),这些类型对应的"具体类型" **取决于具体实现**。 |
| `<sys/time.h>` | 时间函数扩展,提供**微秒级时间精度**(如 `gettimeofday`、`settimeofday`) |
| | |
| `<pthread.h>` | **POSIX 线程库**,提供**线程管理**、**互斥量**、**条件变量**相关 API (`pthread_create`, `pthread_mutex_t`, `pthread_cond_t` 等) |
| `<semaphore.h>` | **POSIX 信号量**,用于线程间同步(`sem_init`, `sem_wait`, `sem_post` 等) |
| `<sys/mman.h>` | **POSIX 共享内存-内存映射**(`mmap`、`munmap`),用于将文件或设备映射到内存空间 |
| `<mqueue.h>` | **POSIX 消息队列**,用于进程间通信(`mq_open`, `mq_send`, `mq_receive`, `mq_close`, `mq_unlink`, `mq_getattr`) |
| `<sched.h>` | 提供**线程调度**功能,定义了**调度相关的函数和结构体**,允许**程序获取和设置线程的调度策略和优先级**(如 `sched_getscheduler`、`sched_setscheduler`) |
| | |
| `<sys/wait.h>` | **进程等待**(`wait`, `waitpid`) |
| | |
| `<sys/ipc.h>` | XSI (SysV 风格) IPC——提供对**进程间通信对象**(如消息队列、信号量、共享内存等)的**键值管理**(`IPC_CREAT`,`IPC_EXCL`) |
| `<sys/msg.h>` | XSI (SysV 风格) **消息队列接口**(`msgget`, `msgsnd`, `msgrcv`),用于在进程之间传递消息 |
| `<sys/shm.h>` | XSI (SysV 风格) **共享内存接口**(`shmget`, `shmat`, `shmdt`),允许多个进程共享内存段 |
| `<sys/sem.h>` | XSI (SysV 风格) **信号量接口**( `semop`, `semget`),用于进程或线程间的同步 |
| | |
| `<sys/resource.h>` | 提供**进程资源限制和使用统计**(`getrusage`, `setrlimit`),用于管理进程的资源消耗(如 CPU 时间、内存使用等) |
| | |
| `<sys/ioctl.h>` | 提供**设备控制接口**(如 `ioctl()` ,用于与设备驱动程序的交互) |
| `<termios.h>` | 提供**终端 I/O 控制**(如 `tcgetattr`, `tcsetattr`, `cfmakeraw`) |
| | |
| `<pwd.h>` | 用户管理(`getpwuid`, `getpwnam`) |
| `<grp.h>` | 组管理(`getgrgid`, `getgrnam`) |
| | |
| `<syslog.h>` | 提供**系统日志**接口(`syslog`, `openlog`, `closelog`) |
| `<dlfcn.h>` | 提供**动态库链接**函数(`dlopen`, `dlsym`, `dlclose`,用于动态链接) |
| | |
| `<sys/socket.h>` | **套接字通信接口**(`socket`, `bind`, `accept`),用于网络通信 |
| `<netinet/in.h>` | 定义了 **Internet 相关的地址结构和常量**(如套接字类型 `sockaddr_in`、大端序小端序转换函数 `htons`、`htonl`、常量 `INET_ADDRESLEN` 等) |
| `<netinet/tcp.h>` | 提供 **TCP 选项和操作**(如 `TCP_NODELAY`) |
| `<arpa/inet.h>` | 提供 **IP 地址转换和处理**(整型与点分十进制 IP 字符串间的转换函数:`inet_pton`, `inet_ntop`) |
| `<netdb.h>` | 提供**网络数据**操作,用于主机和服务信息的解析(例如**字符串形式主机名、服务名**与**套接字地址结构**之间的转换函数:`gethostbyname`, `getaddrinfo`) |
| | |
| `<sys/select.h>` | 提供**I/O 多路复用**接口(`select`),用于同时监**视多个文件描述符的事件**(如读写就绪、错误) |
| `<aio.h>` | 提供**异步 I/O**操作(`aio_read`, `aio_write`),用于在不阻塞程序的情况下执行文件 I/O 操作 |
| `<sys/uio.h>` | 提供**分散/聚集 I/O 操作**(如 `readv`、`writev`),可以一次操作多个缓冲区。 |
| `<poll.h>` | **I/O 事件通知**(如 `poll`,用于监控多个文件描述符的事件) |
> [!Info] `<sys/xxx>` 系列的头文件通常提供 "**底层的系统级接口**",涵盖进程管理、文件 I/O、网络通信、进程间通信、设备控制等。
> [!NOTE] POSIX 库中包含了 System V 风格下的进程间通信机制
>
> `<sys/ipc.h>` 针对的是 `<sys/msg.h>`、`<sys/shm.h>`、`<sys/sem.h>` 这三个 System V 的系统 IPC 机制。
>
<br><br><br>
# C++标准库相关头文件 ⭐
C++标准库包含**近百个头文件**,其中 **约 20 余个源自&涵盖了完整的 C 标准库**。
> [!note] 源自 C 标准库的头文件在 C++中体现为:
>
> - 头文件**名称为 `<cXXX>` 而非 `<XXX.h>`**
> - 头文件中声明的**所有名称都位于 `std` 命名空间中**。
>
C++标准库头文件完整列表参见[^9] [^10]:
![[_attachment/02-开发笔记/01-cpp/库使用/0-MOC-标准库头文件总结.assets/IMG-0-MOC-标准库头文件总结-3C0ED43CAA0CDB9CA7DB50955A9A8B6A.png|1142]]
![[_attachment/02-开发笔记/01-cpp/库使用/0-MOC-标准库头文件总结.assets/IMG-0-MOC-标准库头文件总结-DCD081B1A68F128B2832D31D8E4EAFB2.png|681]]
![[_attachment/02-开发笔记/01-cpp/库使用/0-MOC-标准库头文件总结.assets/IMG-0-MOC-标准库头文件总结-1B4DC8728F169C9ED3E6BF80379566B6.png|668]]
<br><br>
# 参考资料
##### 官方文档
- [C 标准库头文件 - cppreference.com](https://zh.cppreference.com/w/c/header)
- [C++ 标准库标头 - cppreference.com](https://zh.cppreference.com/w/cpp/header)
##### 相关书籍
- 《C 程序设计语言》(附录 B——标准库)
- 《C 语言程序设计:现代方法》
- (第 21 章——标准库)
- (附录 E——标准库函数)
- 《C++ 20 高级编程》(附录 B——标准库头文件)
- 《C++ Prime》(附录 A——标准库)
- 《Unix 环境高级编程》(附录 A——函数原型)
# Footnotes
[^1]: [C 标准库头文件 - cppreference.com](https://zh.cppreference.com/w/c/header)
[^2]: 《C 程序设计语言》(附录 B——标准库)
[^3]: 《C 语言程序设计:现代方法》(第 21 章——标准库)
[^4]: [C POSIX library - Wikipedia](https://en.wikipedia.org/wiki/C_POSIX_library)
[^5]: [operating system - Difference between C standard library and C POSIX library - Stack Overflow](https://stackoverflow.com/questions/9376837/difference-between-c-standard-library-and-c-posix-library)
[^6]: [POSIX (The GNU C Library)](https://www.gnu.org/software/libc/manual/html_node/POSIX.html)
[^7]: [What is the difference of C Standard library and C POSIX library? : r/C\_Programming](https://www.reddit.com/r/C_Programming/comments/tqtkfz/what_is_the_difference_of_c_standard_library_and/)
[^8]: 《Unix 环境高级编程》(P23)
[^9]: [C++ Standard Library headers](https://en.cppreference.com/w/cpp/header)
[^10]: 《C++ 20 高级编程》(附录 B——标准库头文件)