%% # 纲要 > 主干纲要、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——标准库头文件)