IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> glibc 知:内容 -> 正文阅读

[系统运维]glibc 知:内容

1. 前言

GNU C 库是所有 GNU 系统的标准系统 C 库,并且是构成 GNU 系统的重要组成部分。它为所有用 C 和 C 兼容语言(如 C++ 和 Objective C)编写的程序提供系统 API;其他编程语言的运行时工具使用 C 库来访问底层操作系统。

在 GNU/Linux 系统中,C 库与 Linux 内核一起实现用户应用程序看到的操作系统行为。在 GNU/Hurd 系统中,它与微内核和 Hurd 服务器一起工作。

2. 内容

作者找了很久也没能找到一个很权威的关于glibc的介绍,下面是根据glibc手册的目录整理的一份glibc涵盖的内容:
glibc-2.33

2.1. Error Reporting 错误报告

描述了如何报告库检测到的错误。

GNU C 库中的许多函数检测并报告错误情况,有时您的程序需要检查这些错误情况。例如,当您打开一个输入文件时,您应该验证该文件实际上是否被正确打开,如果对库函数的调用失败,则打印一条错误消息或采取其他适当的措施。

大多数库函数返回一个特殊值来表明它们已经失败。特殊值通常是-1、空指针或EOF为此目的而定义的常量。但是这个返回值只告诉你发生了错误。要找出它是哪种错误,您需要查看存储在变量中的错误代码errno。这个变量在头文件errno.h中声明。

2.2. Virtual Memory Allocation And Paging 虚拟内存分配和分页

描述了 GNU C 库用于管理和使用虚拟和实内存的工具,包括虚拟内存的动态分配。如果您事先不知道您的程序需要多少内存,您可以改为动态分配它,并通过指针对其进行操作。

2.3. Character Handling 字符处理

包含有关字符分类函数(例如isspace)和用于执行大小写转换的函数的信息。

处理字符和字符串的程序通常需要对字符进行分类——它是字母、数字、空格等等——并对字符执行大小写转换操作。头文件ctype.h中的函数为此目的而提供。

由于语言环境字符集的选择可以改变特定字符代码的分类,所有这些功能都受当前语言环境的影响。(更准确地说,它们受当前为字符分类选择的语言环境—— LC_CTYPE类别)

ISO C标准指定了两组不同的函数。一组适用于char类型字符, 另一组适用于wchar_t宽字符。

2.4. String and Array Utilities 字符串和数组

描述了用于操作字符串(空终止字符数组)和一般字节数组的函数,包括复制和比较等操作。

对字符串(以空字符结尾的字节序列)的操作是许多程序的重要组成部分。GNU C 库提供了一组广泛的字符串实用函数,包括用于复制、连接、比较和搜索字符串的函数。其中许多功能还可以在任意存储区域上运行;例如,该memcpy 函数可用于复制任何类型数组的内容。

初学者通过在自己的代码中复制此功能来“重新发明轮子”是相当普遍的,但熟悉库函数并使用它们是值得的,因为这在维护、效率和可移植性方面提供了好处.

例如,您可以在两行 C 代码中轻松地将一个字符串与另一个字符串进行比较,但如果您使用内置strcmp函数,则不太可能出错。而且,由于这些库函数通常是高度优化的,您的程序也可能运行得更快。

2.5. Locales and Internationalization 语言环境和国际化

描述选择特定国家或语言如何影响库的行为。例如,语言环境会影响字符串的整理顺序以及如何格式化货币值。

不同的国家和文化对于如何交流有不同的约定。这些约定的范围从非常简单的约定(例如表示日期和时间的格式)到非常复杂的约定(例如所说的语言)。

软件的国际化意味着对其进行编程以适应用户最喜欢的惯例。在 ISO C 中,国际化是通过语言环境进行工作的。每个语言环境指定一组约定,每个目的一个约定。用户通过指定语言环境(通过环境变量)来选择一组约定。

所有程序都继承所选语言环境作为其环境的一部分。如果编写的程序遵循语言环境的选择,它们将遵循用户首选的约定。

2.6. Message Translation 消息翻译

程序与用户的界面应设计为简化用户的任务。减轻用户任务的一种方法是使用用户喜欢的任何语言的消息。

打印不同语言的消息可以以不同的方式实现。人们可以在源代码中添加所有不同的语言,并在每次必须打印消息时在变体中进行选择。这当然不是一个好的解决方案,因为扩展语言集很麻烦(必须更改代码),并且代码本身可能会因数十个消息集而变得非常大。

更好的解决方案是将每种语言的消息集保存在单独的文件中,这些文件在运行时根据用户的语言选择加载。

GNU C 库提供了两组不同的函数来支持消息翻译。问题是这两个接口都没有被 POSIX 标准正式定义。 catgets 函数系列在 X/Open 标准中定义,但这源自行业决策,因此不一定基于合理的决策。

如上所述,消息目录处理通过使用包含消息翻译的外部数据文件提供了轻松的可扩展性。即,这些文件包含程序中使用的每个消息的相应语言的翻译。所以消息处理函数的任务是:

  • 找到具有适当翻译的外部数据文件
  • 加载数据并可以处理消息
  • 将给定的键映射到翻译后的消息

这两种方法的主要区别在于最后一步的实现。最后一步做出的决定会影响设计的其余部分。

2.7. Searching and Sorting 搜索和排序

包含有关用于搜索和排序数组的函数的信息。通过提供适当的比较函数,您可以在任何类型的数组上使用这些函数。

2.8. Pattern Matching 模式匹配

提供匹配正则表达式和 shell 文件名模式的函数,以及像 shell 一样扩展单词的函数。

2.9. I/O 输入/输出

大多数程序需要进行输入(读取数据)或输出(写入数据),或者最常见的是两者都进行,以便做任何有用的事情。GNU C 库提供了如此多的输入和输出函数选择,以至于最难的部分往往是决定哪个函数最合适!

2.10. File System Interface 文件系统接口

描述了对整个文件的操作,例如删除和重命名它们以及创建新目录的功能。还包含有关如何访问文件属性的信息,例如其所有者和文件保护模式。

2.11. Pipes and FIFOs 管道和FIFO

包含有关简单进程间通信机制的信息。管道允许两个相关进程之间(例如父进程和子进程之间)进行通信,而 FIFO 允许在同一台机器上共享公共文件系统的进程之间进行通信。

2.12. Sockets 套接字

描述了一种更复杂的进程间通信机制,它允许运行在不同机器上的进程通过网络进行通信。还包含有关 Internet 主机寻址和如何使用系统网络数据库的信息。

2.13. Low-Level Terminal Interface 底层终端接口

描述了如何更改终端设备的属性。例如,如果您想禁用用户键入的字符的回显。

2.14. Syslog 系统日志

描述用于发布和记录系统管理感兴趣的消息的工具。

大多数系统都有一个称为“系统日志”的工具,它允许程序向系统管理员提交感兴趣的消息,并且可以配置为以各种方式传递这些消息,例如在控制台上打印、邮寄给特定的人,或记录在 日志文件以供将来参考。

2.15. Mathematics 数学

包含有关数学库函数的信息。这些包括诸如随机数生成器和整数余数函数以及浮点数上常用的三角函数和指数函数之类的东西。

当然,还包括简单算术、浮点值分析和从字符串中读取数字等函数。

大多数这些函数都在头文件math.h中声明了原型,复值函数定义在complex.h。

2.16. Date and Time 日期和时间

描述了测量日历时间和 CPU 时间的函数,以及设置闹钟和定时器的函数。

2.17. Resource Usage And Limitation 资源使用和限制

描述了用于检查进程使用了多少各种资源(CPU 时间、内存等)以及获取和设置未来使用限制的函数。

2.18. Non-Local Exits 非本地出口

包含setjmp和 longjmp功能的描述。这些函数为goto-like 跳转提供了一种便利 ,可以从一个函数跳转到另一个函数。

2.19. Signal Handling 信号处理

告诉你所有关于信号的信息——它们是什么,如何建立一个在传递特定类型的信号时调用的处理程序,以及如何防止信号在程序的关键部分到达。

2.20. Program Basics/System Interface 程序基础/系统接口

告诉您的程序如何访问它们的命令行参数和环境变量。

进程是分配系统资源的原始单位。每个进程都有自己的地址空间和(通常)一个控制线程。一个进程执行一个程序;您可以让多个进程执行同一个程序,但每个进程在自己的地址空间内都有自己的程序副本,并且独立于其他副本执行。尽管在同一个程序中可能有多个控制线程,并且一个程序可能由多个逻辑上独立的模块组成,但一个进程总是只执行一个程序。

本章解释了程序与运行或调用它的系统之间最基本的接口。这包括从系统传递参数(参数和环境)、从系统请求基本服务以及告诉系统程序已完成。

2.21. Processes 进程

包含有关如何启动新进程和运行程序的信息。

2.22. Inter-Process Communication 进程间通信

描述 GNU C 库进程间通信原语。

2.23. Job Control 作业控制

描述了操作进程组和控制终端的功能。如果您正在编写专门处理作业控制的shell程序或其他程序,则可能仅对这些材料感兴趣。

2.24. System Databases and Name Service Switch 系统数据库和名称服务开关

描述了可用于在系统数据库中查找名称的服务,如何确定哪个服务用于哪个数据库,以及这些服务是如何实现的,以便贡献者可以设计自己的服务。

2.25. Users and Groups 用户和组

每个可以登录系统的用户都由一个称为用户 ID 的唯一编号标识。 每个进程都有一个有效的用户 ID,表明它拥有哪个用户的访问权限。

出于访问控制的目的,用户被分为多个组。 每个进程都有一个或多个组 ID 值,这些值表示该进程可以使用哪些组来访问文件。

进程的有效用户和组 ID 共同构成其角色。 这决定了进程可以访问哪些文件。 通常,进程从父进程继承其角色,但在特殊情况下,进程可以更改其角色,从而更改其访问权限。

系统中的每个文件也有一个用户 ID 和一个组 ID。 访问控制的工作原理是将文件的用户和组 ID 与正在运行的进程的 ID 进行比较。

系统保存所有注册用户的数据库,以及所有定义组的另一个数据库。 您可以使用一些库函数来检查这些数据库。

2.26. System Management 系统管理

描述了用于控制和获取有关程序正在执行的硬件和软件配置的信息的功能。

2.27. System Configuration Parameters 系统配置

告诉您如何获取有关各种操作系统限制的信息。提供这些参数中的大多数是为了与 POSIX 兼容。

2.28. Cryptographic Functions 加密函数

GNU C 库仅包含一些特殊用途的加密函数:用于密码存储的单向哈希函数,以及访问加密随机源(如果操作系统提供)。 需要通用密码的程序应该使用专用的密码库,例如 libgcrypt。

许多国家/地区对加密软件的进口、出口、拥有或使用施加了法律限制。 我们对这些限制表示遗憾,但我们仍然必须警告您,即使您自己不使用本章中的功能,GNU C 库也可能受到这些限制。 限制因地而异并且经常更改,因此我们无法提供比此警告更具体的建议。

2.29. Debugging support 调试支持

应用程序通常使用专用调试器程序进行调试。 但有时这是不可能的,无论如何,在遇到问题时向开发人员提供尽可能多的信息是有用的。 为此,提供了一些功能,程序可以使用这些功能帮助开发人员更轻松地定位问题。

2.30. Threads 线程

介绍用于管理线程的函数。 GNU C 库提供了两种线程实现:ISO C 线程和 POSIX 线程。

2.31. Internal probes 内部探测器

为了帮助调试和监控内部行为,GNU C 库公开了标有 libc 提供程序的几乎零开销的 SystemTap 探测器。

这些探测器不是 GNU C 库稳定 ABI 的一部分,它们可能会在不同版本之间发生更改或删除。 我们对它们的唯一承诺是,如果我们发现需要删除或修改探测器的参数,修改后的探测器将具有不同的名称,以便依赖旧探测器的程序监视器不会得到意外的参数。

2.32. Tunables 可调参数

可调参数是 GNU C 库中的一项功能,它允许应用程序作者和分发维护者更改运行时库行为以匹配他们的工作负载。这些被实现为一组可以以不同方式修改的开关。当前执行此操作的默认方法是通过 GLIBC_TUNABLES 环境变量将其设置为以冒号分隔的 name=value 对字符串。

3. 后语

这里只是简单介绍了glibc中涵盖了哪些内容,至于每块内容的详情,后续会陆续进行学习和讲解……

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 12:01:39  更:2021-07-25 12:02:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:40:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码