![](https://img-blog.csdnimg.cn/61733125f15b453fb712b12b9815b10c.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
libc
文章平均质量分 89
C Library
canpool
21世纪IT民工,技能不知多少
展开
-
libc 知:序
C library - C语言库原创 2021-08-12 22:37:47 · 263 阅读 · 0 评论 -
musl 知:构建1.2.3版本
1)configure默认配置 prefix 为 /usr/local/musl,这也是安装的目录,可以用通过 --help 参数了解更多配置。下面写一个打印hello world的c程序,基于安装的 musl 1.2.3 进行执行。2)make后面的-j4,其中4可以根据CPU数进行调整。这里选择 1.2.3 版本进行下载。1)程序 test.c。原创 2022-09-30 00:41:05 · 833 阅读 · 0 评论 -
glibc 知:构建机制
文章目录1. 前言1.1. 执行配置命令1.2. 生成构建日志2. 构建2.1. 总体机制2.1.1. 默认规则2.1.2. lib规则2.1.3. stamp规则2.1.4. subdir_lib规则2.1.4.1. subdirs列表2.1.5. libtypes规则2.1.5.1. o-iterator2.1.6. libc.so规则2.2. 系统调用的选择机制2.2.1. strcpy实现2.2.2. 系统依赖规则2.2.3. sysd-rules.awk2.2.4. sysd-rules文件2.2原创 2022-05-06 00:42:20 · 931 阅读 · 0 评论 -
glibc 知:构建2.34版本
文章目录获取版本构建安装获取版本主页:https://www.gnu.org/software/libc这里选择任意一个压缩包下载即可。构建安装tar -Jxf glibc-2.34.tar.xzmkdir build installcd build../glibc-2.34/configure --prefix=/usrmake -j4make install DESTDIR=../install...原创 2021-12-20 23:41:47 · 10662 阅读 · 0 评论 -
musl 知:内存管理
文章目录前言设计思想malloc本质brkmmap数据结构chuck 和 binchunk 结构bin 结构小结宏mal 结构malloc/free 函数初识 malloc/free 函数malloc 函数free 函数小结解析 malloc 函数adjust_size 函数数据结构函数解析申请大内存哨兵chunk逻辑简析__mmap 函数申请小内存逻辑简析bin 下标bin_tab 表bin_index 函数bin_index_up 函数参考前言musl libc 是一个专门为嵌入式系统开发的轻量级原创 2021-11-02 23:36:33 · 3271 阅读 · 0 评论 -
glibc 知:测试套件
文章目录前言测试套件目标只测试一项测试ABI检查有关 make xcheck 特定测试的详细信息编写测试用例使用交叉编译器进行测试后语前言glibc的测试套件的wiki主页为:https://sourceware.org/glibc/wiki/Testing/Testsuite如何构建glibc?可以参考:glibc 知:构建和测试测试套件目标典型的测试用例在构建目录中写出一个扩展名为 .out 的文件,其中包含测试的输出。可以在测试用例失败的情况下检查此文件以确定问题所在。如果您在 bugzil原创 2021-10-24 14:37:23 · 1307 阅读 · 0 评论 -
musl 知:官方
文章目录官网社区wiki官网主页:http://musl.libc.org/musl是构建在 Linux 系统调用 API 之上的 C 标准库的实现,包括在基本语言标准、POSIX 和广泛认可的扩展中定义的接口。musl 是轻量级的、快速的、简单的、免费的,并且在标准一致性和安全性方面力求 正确。musl,发音类似于“mussel贻贝”或“muscle肌肉”这个词,是一个“libc”,它是 ISO C 和 POSIX 标准中描述的标准库功能的实现,加上公共扩展,构建在 Linux 系统调用 API原创 2021-09-08 00:21:48 · 4709 阅读 · 2 评论 -
glibc 知:官方
文章目录官网What is glibc?什么是glibcGet started 开始Get Involved 参与其中Sources 源码Documentation 文档Report a bug 报告缺陷社区wiki贡献资源社区资源内部文档测试调试技巧和窍门官网主页:https://www.gnu.org/software/libcWhat is glibc?什么是glibcGNU C 库项目为 GNU 系统和 GNU/Linux 系统以及许多其他使用 Linux 作为内核的系统提供核心库。 这些原创 2021-07-22 23:12:02 · 1906 阅读 · 0 评论 -
glibc 知:内容
文章目录前言内容Error Reporting 错误报告Memory 内存Character Handling 字符处理String and Array Utilities 字符串和数组Character Set Handling 字符集处理Locales 本地化Searching and Sorting 搜索和排序Pattern Matching 模式匹配I/O Overview 概述I/O on StreamsLow-Level I/OFile System Interface 文件系统接口Pipes原创 2021-07-24 22:37:21 · 1598 阅读 · 0 评论 -
glibc 知:构建和测试
文章目录前言构建只构建不安装构建并安装测试正常编译应用,在新glibc下运行基于glibc构建树进行编译应用基于glibc安装位置进行编译应用所需的gdb设置线程设置环境设置调试测试用例后语前言构建和测试glibc的wiki主页为:https://sourceware.org/glibc/wiki/Testing/Builds本章将介绍glibc的构建和使用……构建我们知道一般linux系统中都会存在已有的glibc库,现在我们要构建自己的glibc库,那新构建的glibc会不会破坏已有的glib原创 2021-07-27 22:19:01 · 3306 阅读 · 2 评论 -
glibc 知:通用调试技术
文章目录1. 调试加载器1.1. 在应用主程序之前调试加载器1.2. 单步执行加载器1.3. 使用备用加载器进行调试2. 将错误构建中的代码注入到良好构建中的测试用例中2.1. 设想前提条件2.2. 设想调试选项2.3. 识别故障点2.4. 从错误的构建中提取有问题的 .o 文件2.5. 生成脚本以链接有问题的 .o 文件以清理构建 test-memcpy2.6. 识别有问题的代码,重新生成有问题的 mempcy.o 并重新链接2.7. 动态链接最终可执行文件不起作用的角落案例3. GLIBC 搜索顺序4.原创 2021-07-31 22:42:35 · 540 阅读 · 0 评论 -
glibc 知:动态加载器操作
wiki主页:https://sourceware.org/glibc/wiki/DynamicLoader以下是动态加载器启动的注释和汇总视图:RTLD_START (sysdep/<arch>/dl-machine.h) _dl_start (elf/rtld.c) ELF_MACHINE_BEFORE_RTLD_RELOC (sysdep/<arch>/dl-machine.h) ELF_DYNAMIC_RELOCATE (sysdep/<arch原创 2021-07-29 23:48:35 · 364 阅读 · 0 评论 -
glibc 知:ld.so
dynamic linker/loader 动态链接器/加载器原创 2021-08-01 20:24:27 · 1821 阅读 · 0 评论 -
glibc 知:ABI检测
wiki主页:https://sourceware.org/glibc/wiki/Testing/ABI_checkerglibc可以通过abi-compliance-checker和/或abi-dumper工具进行ABI检测,具体操作请查看wiki主页。关于abi检测工具的介绍也可以访问下面文章:abi-compliance-checker 理解abi-dumper 理解...原创 2021-08-01 22:24:57 · 379 阅读 · 0 评论 -
glibc 知:源码
文章目录前言目录结构后语前言代码仓:https://sourceware.org/git/glibc.gitgitweb:https://sourceware.org/git/?p=glibc.gittar包:http://ftp.gnu.org/gnu/glibc/目录结构类型名称说明dargp分层参数解析,在 getopt 上分层dassert断言dbenchtestsglibc 微基准套件自动为指定函数生成代码,为给定输入重复构建和调用它们,以原创 2021-07-28 23:21:10 · 736 阅读 · 0 评论 -
glibc 知:系统调用
文章目录系统调用包装器汇编系统调用宏系统调用系统调用包装器wiki主页:https://sourceware.org/glibc/wiki/SyscallWrappersglibc 使用三种类型的操作系统内核系统调用包装器:汇编、宏和定制。说明:本文所使用的代码为glibc的master分支代码,版本>2.33。汇编系统调用glibc 中的简单内核系统调用从名称列表转换为汇编包装器,然后进行编译。在构建目录中反汇编socket系统调用,将看到syscall-template.S包装器:原创 2021-08-02 00:30:12 · 2372 阅读 · 0 评论 -
glibc 知:手册01:介绍
文章目录1. 前言2. 介绍2.1. 入门2.2. 标准和可移植性2.2.1. ISO C2.2.2. POSIX(可移植操作系统接口)2.2.2.1. POSIX 安全概念2.2.2.2. 不安全特性2.2.2.3. 条件安全特征2.2.2.4. 其它安全备注2.2.3. 伯克利 Unix2.2.4. SVID(System V接口描述)2.2.5. XPG(X/Open 可移植性指南)2.3. 使用库2.3.1. 头文件2.3.2. 函数宏定义2.3.3. 保留名称2.3.4. 功能测试宏2.4. 手册原创 2021-12-08 08:26:58 · 2098 阅读 · 0 评论 -
glibc 知:手册02:错误报告
文章目录1. 前言2. 错误报告2.1. 检查错误2.2. 错误代码2.3. 错误信息3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 错误报告Error ReportingGNU C 库中的许多函数检测并报告错误情况,有时您的程序需要检查这些错误情况。例如,当您打开一个输入文件时,您应该验证该文件实际上是否正确打开,如果调用库函数失败,则打印一条错误消息或采取其他适当的措施。本章描述错误报告工具的工作原理。您的程序应原创 2021-12-08 13:17:36 · 732 阅读 · 0 评论 -
glibc 知:手册03:虚拟地址分配和分页
文章目录1. 前言2. 虚拟地址分配和分页2.1. 进程内存概念2.2. 为程序数据分配存储空间2.2.1. C 程序中的内存分配2.2.1.1. 动态内存分配2.2.2. GNU 分配器2.2.3. 无约束分配2.2.3.1. 基本内存分配(malloc)2.2.3.2. malloc的例子2.2.3.3. 释放使用malloc分配的内存(free)2.2.3.4. 更改块的大小(realloc)2.2.3.5. 分配已清理空间(calloc)2.2.3.6. 分配对齐的内存块(aligned_alloc原创 2021-12-08 13:19:36 · 761 阅读 · 0 评论 -
glibc 知:手册04:字符处理
文章目录1. 前言2. 字符处理2.1. 字符分类2.2. 大小写转换2.3. 宽字符的字符类别确定2.4. 使用宽字符类的注意事项2.5. 宽字符的映射3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 字符处理Character Handling处理字符和字符串的程序通常需要对字符进行分类——它是字母、数字、空格等等——并对字符执行大小写转换操作。为此目的提供了头文件 ctype.h 中的函数。由于语言环境和字符集的原创 2021-12-08 13:20:09 · 182 阅读 · 0 评论 -
glibc 知:手册05:字符串和数组
文章目录1. 前言2. 字符串和数组实用程序2.1. 字符串的表示2.2. 字符串和数组约定2.3. 字符串长度2.4. 复制字符串和数组2.5. 连接字符串2.6. 复制时截断字符串3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 字符串和数组实用程序String and Array Utilities对字符串(以空结尾的字节序列)的操作是许多程序的重要组成部分。GNU C 库提供了一组广泛的字符串实用函数,包括用于复原创 2021-12-08 13:20:48 · 503 阅读 · 0 评论 -
glibc 知:手册06:字符集处理
文章目录1. 前言2. 字符集处理2.1. 扩展字符简介2.2. 字符处理函数概述2.3. 可重启的多字节转换函数2.3.1. 选择转换及其属性2.3.2. 表示转换的状态2.3.3. 转换单个字符2.3.4. 转换多字节和宽字符串2.3.5. 一个完整的多字节转换示例2.4. 不可重入转换函数2.4.1. 单个字符的不可重入转换2.4.2. 字符串的不可重入转换2.4.3. 不可重入函数中的状态2.5. 通用字符集转换2.5.1. 通用字符集转换接口2.5.2. 一个完整的iconv示例2.5.3. 关于原创 2022-05-09 22:06:09 · 555 阅读 · 0 评论 -
glibc 知:手册07:语言环境和国际化
文章目录1. 前言2. 语言环境和国际化2.1. 语言环境有什么影响2.2. 选择语言环境2.3. 语言环境类别2.4. 程序如何设置语言环境2.5. 标准语言环境2.6. 语言环境名称2.7. 访问区域信息2.7.1. localeconv:它是可移植的,但是……2.7.1.1. 通用数字格式参数2.7.1.2. 打印货币符号2.7.1.3. 打印金额的符号2.7.2. 精确访问区域设置数据2.8. 格式化数字的专用函数2.9. 是或否问题3. 参考1. 前言The GNU C Library Ref原创 2021-12-08 13:21:18 · 343 阅读 · 0 评论 -
glibc 知:手册08:消息翻译
文章目录1. 前言2. 消息翻译2.1. X/Open 消息目录处理2.1.1. catgets 函数族2.1.2. 消息目录文件的格式2.1.3. 生成消息目录文件2.1.4. 如何使用catgets接口2.1.4.1. 不使用符号名2.1.4.2. 使用符号名2.1.4.3. 如何允许开发2.1.5. gettext 系列函数2.1.5.1. 翻译消息需要做什么?2.1.5.2. 如何确定使用哪个目录2.1.5.3. 更复杂情况的附加功能2.1.5.4. 如何指定 gettext 使用的输出字符集2.1原创 2022-05-09 22:06:46 · 326 阅读 · 0 评论 -
glibc 知:手册09:搜索和排序
文章目录1. 前言2. 搜索和排序2.1. 定义比较函数2.2. 数组搜索函数2.3. 数组排序函数2.4. 搜索和排序示例2.5. hsearch 函数2.6. tsearch 函数3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 搜索和排序Searching and Sorting本章介绍用于搜索和排序任意对象数组的函数。您传递要作为参数应用的适当比较函数,以及数组中对象的大小和元素总数。2.1. 定义比较函数D原创 2021-12-08 13:21:54 · 301 阅读 · 0 评论 -
glibc 知:手册10:模式匹配
文章目录1. 前言2. 模式匹配2.1. 通配符匹配2.2. 通配符2.2.1. 调用 glob2.2.2. 通配符2.2.3. 更多用于通配符的标志2.3. 正则表达式匹配2.3.1. POSIX正则表达式编译2.3.2. POSIX 正则表达式的标志2.3.3. 匹配编译后的 POSIX 正则表达式2.3.4. 匹配结果与子表达式2.3.5. 子表达式匹配的复杂性2.3.6. POSIX 正则表达式匹配清理2.4. Shell 风格的词扩展2.4.1. 词扩展的阶段2.4.2. 调用wordexp2.4原创 2021-12-08 13:22:27 · 459 阅读 · 0 评论 -
glibc 知:手册11:输入/输出概述
文章目录1. 前言2. 输入/输出概述2.1. 输入/输出概念2.1.1. 流和文件描述符2.1.2. 文件位置2.2. 文件名2.2.1. 目录2.2.2. 文件名解析2.2.3. 文件名错误2.2.4. 文件名的可移植性3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 输入/输出概述Input/Output Overview大多数程序需要进行输入(读取数据)或输出(写入数据),或者最常见的情况是两者都进行,以执行任何原创 2021-12-09 00:00:58 · 220 阅读 · 0 评论 -
glibc 知:手册12:输入/输出流
文章目录1. 前言2. 输入/输出流2.1. 流2.2. 标准流2.3. 打开流2.4. 关闭流2.5. 流和线程2.6. 国际化应用程序中的流2.7. 按字符或行的简单输出2.8. 字符输入2.9. 面向行的输入2.10. 未读2.10.1. 未读意味着什么2.10.2. 使用ungetc做不读2.11. 块输入/输出2.12. 格式化输出2.12.1. 格式化输出基础2.12.2. 输出转换语法2.12.3. 输出转换表2.12.4. 整数转换2.12.5. 浮点转换2.12.6. 其他输出转换2.12原创 2022-05-09 22:07:17 · 744 阅读 · 0 评论 -
glibc 知:手册13:底层输入/输出
文章目录1. 前言2. 底层输入/输出2.1. 打开和关闭文件2.2. 输入和输出原语2.3. 设置描述符的文件位置2.4. 描述符和流2.5. 混合流和描述符的危险2.5.1. 链接通道2.5.2. 独立通道2.5.3. 清洗流2.6. 快速分散-聚集 I/O2.7. 在两个文件之间复制数据2.8. 内存映射I/O2.9. 等待输入或输出2.10. 同步 I/O 操作2.11. 并行执行 I/O 操作2.11.1. 异步读写操作2.11.2. 获取 AIO 操作状态2.11.3. 进入一致状态2.11.4原创 2022-05-09 22:07:59 · 338 阅读 · 0 评论 -
glibc 知:手册14:文件系统接口
文章目录1. 前言2. 文件系统接口2.1. 工作目录2.2. 访问目录2.2.1. 目录条目的格式2.2.2. 打开目录流2.2.3. 读取和关闭目录流2.2.4. 列出目录的简单程序2.2.5. 目录流中的随机访问2.2.6. 扫描目录的内容2.2.7. 列出目录的简单程序,Mark II2.2.8. 底层目录访问2.3. 使用目录树2.4. 硬链接2.5. 符号链接2.6. 删除文件2.7. 重命名文件2.8. 创建目录2.9. 文件属性2.9.1. 文件属性的含义2.9.2. 读取文件的属性2.9.原创 2021-12-09 00:00:18 · 1038 阅读 · 0 评论 -
glibc 知:手册15:管道和FIFO
文章目录1. 前言2. 管道和 FIFO2.1. 创建管道2.2. 到子进程的管道2.3. FIFO 特殊文件2.4. 管道 I/O 的原子性3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 管道和 FIFOPipes and FIFOs管道是一种进程间通信机制;一个进程写入管道的数据可以被另一个进程读取。数据按先进先出 (FIFO) 顺序处理。管道没有名字;它是为一次使用而创建的,并且两端必须从创建管道的单个进程继承。原创 2021-12-09 00:03:37 · 147 阅读 · 0 评论 -
glibc 知:手册16:套接字
文章目录1. 前言2. 套接字2.1. 套接字概念2.2. 通信方式2.3. 套接字地址2.3.1. 地址格式2.3.2. 设置套接字地址2.3.3. 读取套接字地址2.4. 接口命名2.5. 本地命名空间2.5.1. 本地命名空间概念2.5.2. 本地命名空间细节2.5.3. 本地命名空间套接字示例2.6. 互联网命名空间2.6.1. Internet 套接字地址格式2.6.2. 主机地址2.6.2.1. Internet 主机地址2.6.2.2. 主机地址数据类型2.6.2.3. 主机地址函数2.6.2原创 2021-12-09 00:04:11 · 595 阅读 · 0 评论 -
glibc 知:手册17:底层终端接口
文章目录1. 前言2. 底层终端接口2.1. 识别终端2.2. I/O 队列2.3. 两种输入方式:规范或非规范2.4. 终端模式2.4.1. 终端模式数据类型2.4.2. 终端模式功能2.4.3. 正确设置终端模式2.4.4. 输入模式2.4.5. 输出模式2.4.6. 控制模式2.4.7. 本地模式2.4.8. 行速度2.4.9. 特殊字符2.4.9.1. 输入编辑字符2.4.9.2. 引起信号的字符2.4.9.3. 流控制的特殊字符2.4.9.4. 其他特殊字符2.4.10. 非规范输入2.5. BS原创 2021-12-09 00:04:48 · 505 阅读 · 0 评论 -
glibc 知:手册18:系统日志
文章目录1. 前言2. 系统日志2.1. Syslog概述2.2. 提交系统日志消息2.2.1. 打开日志2.2.2. 系统日志2.2.3. 关闭日志2.2.4. 设置日志掩码2.2.5. 系统日志示例3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 系统日志Syslog本章描述了用于发布和记录系统管理感兴趣的消息的工具。本章与向自己的用户发布消息或保留私人日志的程序无关(通常会使用输入/输出流中描述的工具来做到这一点)原创 2021-12-09 00:05:24 · 340 阅读 · 0 评论 -
glibc 知:手册19:数学库
文章目录1. 前言2. 数学2.1. 预定义的数学常数2.2. 三角函数2.3. 反三角函数2.4. 取幂和对数2.5. 双曲函数2.6. 特殊功能2.7. 数学函数中已知的最大误差2.8. 伪随机数2.8.1. ISO C 随机数函数2.8.2. BSD 随机数函数2.8.3. SVID 随机数函数2.9. 首选快码还是小码?3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 数学Mathematics本章包含有关用于执原创 2021-12-09 00:05:56 · 653 阅读 · 0 评论 -
glibc 知:手册20:算术函数
文章目录1. 前言2. 算术函数2.1. 整数2.2. 整数除法2.3. 浮点数2.4. 浮点数分类函数2.5. 浮点计算中的错误2.5.1. FP 异常2.5.2. 无穷大和NaN2.5.3. 检查 FPU 状态字2.5.4. 数学函数的错误报告2.6. 舍入模式2.7. 浮点控制函数2.8. 算术函数2.8.1. 绝对值2.8.2. 归一化函数2.8.3. 舍入函数2.8.4. 余数函数2.8.5. 设置和修改单个 FP 值2.8.6. 浮点比较函数2.8.7. 其他 FP 算术函数2.9. 复数2.1原创 2022-05-09 22:08:42 · 603 阅读 · 0 评论 -
glibc 知:手册21:日期和时间
文章目录1. 前言2. 日期和时间2.1. 时间基础2.2. 时间类型2.3. 计算经过时间2.4. 处理器和 CPU 时间2.4.1. CPU时间查询2.4.2. 处理器时间查询2.5. 日历时间2.5.1. 获得时间2.5.2. 设置和调整时间2.5.3. 故障时间2.5.4. 格式化日历时间2.5.5. 将文本时间和日期信息转换回来2.5.5.1. 根据给定格式解释字符串2.5.5.2. 一种更加用户友好的时间和日期解析方式2.5.6. 用 TZ 指定时区2.5.7. 时区的函数和变量2.5.8. 时原创 2021-12-09 00:06:32 · 600 阅读 · 0 评论 -
glibc 知:手册22:资源使用和限制
文章目录1. 前言2. 资源使用和限制2.1. 资源使用2.2. 限制资源使用2.3. 进程CPU优先级和调度2.3.1. 绝对优先2.3.1.1. 使用绝对优先级2.3.2. 实时调度2.3.3. 基本调度函数2.3.4. 传统调度2.3.4.1. 传统调度简介2.3.4.2. 传统调度的函数2.3.5. 限制对某些 CPU 的执行2.4. 查询内存可用资源2.4.1. 传统 Unix 内存处理概述2.4.2. 如何获取内存子系统的信息?2.5. 了解可用的处理器3. 参考1. 前言The GNU C原创 2021-12-09 00:07:02 · 408 阅读 · 0 评论 -
glibc 知:手册23:非本地退出
文章目录1. 前言2. 非本地退出2.1. 非本地退出简介2.2. 非本地退出明细2.3. 非本地退出和信号2.4. 完整的上下文控制3. 参考1. 前言The GNU C Library Reference Manual for version 2.352. 非本地退出有时,当您的程序在一组深度嵌套的函数调用中检测到异常情况时,您希望能够立即返回到外部控制级别。本节介绍如何使用 setjmp 和 longjmp 函数执行此类非本地退出。2.1. 非本地退出简介作为非本地退出可能有用的情况的示例原创 2021-12-09 00:07:34 · 143 阅读 · 0 评论 -
glibc 知:手册24:信号处理
The GNU C Library Reference Manual for version 2.35Signal Handling信号是传递给进程的软件中断。操作系统使用信号将异常情况报告给正在执行的程序。一些信号报告错误,例如引用无效的内存地址;其他人报告异步事件,例如电话线断开。GNU C 库定义了多种信号类型,每种信号类型都对应一种特定的事件。某些类型的事件使程序不宜或不可能照常进行,相应的信号通常会中止程序。默认情况下会忽略报告无害事件的其他类型的信号。如果您预期会导致信号的事件,您可以定义一个处原创 2021-12-10 00:16:02 · 373 阅读 · 0 评论