c函数定义的格式(初中函数入门基础知识)

   2023-01-12 互联网0
核心提示:glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于

c函数定义的格式(初中函数入门基础知识)

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。在 GNU/Linux 系统中,其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。

newlib c库是一个开源的c函数库,包括libc和libm两部分。它支持ANSI C库标准,针对不同处理器架构进行优化,轻量级,适用于嵌入式系统。

一. GLIBC

glibc是一种按照LGPL许可协议发布的C函数库,是程序运行时使用到的一些API集合,它们一般是已预先编译好,以二进制代码形式存在于Linux类系统中,glibc通常作为GNU C编译程序的一个部分发布。 它最初是自由软件基金会为其GNU操作系统所写,但目前最主要的应用是配合Linux内核,成为GNU/Linux操作系统一个重要的组成部分。

在通用的PC和Server中,Linux(ubuntu, Redhat, CentOS etc.)默认提供对glibc的支持;但是在嵌入式应用中,考虑到系统对os大小的要求和简化系统的复杂度等因素,并不一定支持glibc,而是支持uClibc、newLib等针对嵌入式应用的C函数库。这就要求在嵌入式系统开发的过程中,需要评估应用对glibc的依赖程度,评估程序开发或移植的工作量和复杂度。

glibc是linux系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,关于glibc功能的介绍可以在其官方网站上获取到详细的手册资料(
http://www.gnu.org/software/libc/manual/)。

主要的功能如下(摘自glibc手册):

(1)Error Reporting,进行错误类型的检测和报告(how errors detected by the library are reported)

(2)Language Features, support for standard parts of the C language, including things like the sizeof operator and the symbolic constant NULL, how to write functions accepting variable numbers of arguments, and constants describing the ranges and other properties of the numerical types. There is also a simple debugging mechanism which allows you to put assertions in your code, and have diagnostic messages printed if the tests fail.

(3)Memory, 动态内存的分配和管理 (describes the GNU library’s facilities for managing and using virtual and real memory, including dynamic allocation of virtual memory. If you do not know in advance how much memory your program needs, you can allocate it dynamically instead, and manipulate it via pointers.)

(4) 字符、字符串及数组的处理 Character Handling is about character classification functions (such as isspace) and functions for performing case conversion. String and Array Utilities, include functions for manipulating strings (null-terminated character arrays) and general byte arrays, including operations such as copying and comparison.

(5)标准IO的支持

(6)文件操作的支持(File System Interface, such as functions for deleting and renaming them and for creating new directories. also contains information about how you can access the attributes of a file, such as its owner and file protection modes. )

(7)进程间通讯的支持(Pipes and FIFOs, Pipes allow communication between two related processes (such as between a parent and child), while FIFOs allow communication between processes sharing a common file system on the same machine. )

(8)网络的支持(socket)

(9) 虚拟终端设备的管理,及系统的安全访问(Low-Level Terminal Interface, change the attributes of a terminal device. disable echo of characters typed by the user, for example, read this chapter. )

(10)数学及运算库的支持(定点运算和浮点库)

(11)查找和分类的支持(Searching and Sorting)

(12)模式匹配的支持(Pattern Matching)

(13)时间及定时器的管理

(14)不同字符集的编码转换

(15)国际化的支持,选择不同的语言种类和国家

(16)Non-Local Exits (provide a facility for goto-like jumps which can jump from one function to another.)

(17)信号量的支持(Signal Handling, establish a handler that is called when a particular kind of signal is delivered, and how to prevent signals from arriving during critical sections of your program.)

(18)进程编程和进程控制(process and Job control)

(19)用户管理和系统管理(User Database and System Management) 等

二. uClibc

uClibc 是一个面向嵌入式Linux系统的小型的C标准库。最初uClibc是为了支持uClinux而开发,这是一个不需要内存管理单元的Linux版本,因此适合于微控制器系统(uCs;此处”u”是代表”micro”的μ的罗马化).[2]

uClibc比一般用于Linux发行版的C库GNU C Library (glibc)要小得多,glibc目标是要支持最大范围的硬件和内核平台的所有C标准,而uClibc专注于嵌入式Linux.很多功能可以根据空间需求进行取舍。

uClibc运行于标准的以及无MMU的Linux系统上,支持tile, i386,x86 64,ARM (big/little endian), AVR32,Blackfin,h8300,m68k,MIPS (big/little endian), PowerPC,SuperH (big/little endian), SPARC,和v850等处理器。

uClibc和Glibc并不相同,两者有许多不同之处,而且以下不同有可能给你带来一些问题.

1.uClibc比Glibc小,虽然uClibc和Glibc在已有的接口上是兼容的,而且采用uClibc编译应用程序比采用Glibc编译应用程序要更方便,但是uClibc并没有包括Glibc中的所有接口实现,因此有些应用可能在uClibc中不能编译。

2.uClibc在可配置性上比Glibc要好。

3.uClibc并不能保证发布的库二进制兼容旧版本uClibc库。当一个新的版本uClibc库被发布,则可能需要也可能不需要重新编译应用程序。

4.uClibc没有提供用于数据接口的库(libdb)。

5.uClibc不支持NSS(/lib/libnss_*),在这方面Glibc更容易支持不同方式的认证和DNS解析。uClibc仅仅支持采用flat口令文件或者shadow口令文件存储授权信息。如果需要比这些更复杂的的授权,可以编译安装pam。

6.uClibc中的libresolv库仅仅是一个桩。Glibc的libresolv库中的部分并不是全部的功能uClibc都提供,许多函数都没有实现。

7.提供网络信息服务支持(NIS)libnsl库(最初被称为黄页YP),被SUN扩展为发明为RPC并用于网络共享Unix口令文件

。个人认为NIS是一个令人厌恶的东西并应该使用。因此,在实现相同的功能情况下采用ldap比NIS更有效。uClibc虽然提供一个桩libnsl,但并不支持NIS。我们因此也不提供在Glibc下提供的位于/usr/include/rpcsvc里的头文件。

8.uClibc的区域支持并不是100%的完全。正在这方面努力

9.uClibc的数据功能函数库内部仅仅支持long double,设置对于long double的支持也是非常有限。与此对应的只实现了较少的数学函数。如果应用程序采用double类型,则会程序会运行得较好。

10.uClibc的libcrpt库不支持可重入crypt_r,setkey_r和encrypt_r,因为这些也不是SuSv3所规定的。

11.uClibc直接采用内核的数据类型去定义大多数透明的数据类型。

12.uClibc支持采用linux内核结构特有的结构体”struct stat”。

13.uClibc的运行时库librt当前缺少aio接口、全部的时钟接口和共享内存接口(仅仅实现定时器接口和消息队列接口)

三. newlib

Newlib是一个面向嵌入式系统的C运行库。最初是由Cygnus Solutions收集组装的一个源代码集合,取名为newlib,现在由Red Hat维护。

对于与GNU兼容的嵌入式C运行库,Newlib并不是唯一的选择,但是newlib是比较优秀和成熟度比较高的一个。newlib具有独特的体系结构,使得它能够非常好地满足深度嵌入式系统的要求。newlib可移植性强,具有可重入特性、功能完备等特点,已广泛应用于各种嵌入式系统中。

newlib 是一个用于嵌入式系统的开放源代码的C语言程序库,由libc和libm两个库组成,特点是轻量级,速度快,可移植到很多CPU结构上。newlib实现了许多复杂的功能,包括字符串支持,浮点运算,内存分配(如malloc)和I/O流函数(printf,fprinf()等)。其中libc提供了c 语言库的实现,而libm提供了浮点运算支持。

在使用gcc编译器时,对gcc指定不同的配置选项时,使用的C语言库就不同,默认情况是下使用glibc,可以通过–with-newlib选择使用newlib.

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与爱美生活网(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • php字符串函数大全(php处理字符串函数)
    php字符串函数大全(php处理字符串函数)
    什么是多字节的字符串操作呢?其实不少的同学可能都已经使用过了,但我们还是要从最基础的问题说起。 一个字符占几个字节并不是我们表面上看到的那样。正常情况下,一个数字或英文以及英文符号都是占用一个字节的。但是这个世界的语言文字何其之多,特别是像
  • 经济学中的微积分怎么理解
    经济学中的微积分怎么理解
    微分是指一个变量的很小的变动量.本身没有什么含义。在经济学中,微积分通常指对某一函数求导数和求积分,导数是一个很有意义的量。它是一种量的变化对另一种量的变化的影响。如成本函数对产量求导表示边际成本,它是一个单位产量变动对成本的影响。积分的含
  • mid是什么函数(分享mid函数应用指南)
    mid是什么函数(分享mid函数应用指南)
    朋友们可能用过“Left()”函数,那你们知道“Mid()”函数怎么使用吗? 今天我们来讲一下这个函数如何在Excel中使用。 Mid()函数的含义 Mid()函数通常用来截取某个单元格内字符串中,从指定位置开始的某一个或者某几个指定个数的
  • c中的MFC是什么意思
    c中的MFC是什么意思
    MFC,Microsoft Foundation Classes的简称,是微软公司提供的一个类库,以C语言类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和
  • js比较日期大小的函数(js计算两个日期相差天数)
    js比较日期大小的函数(js计算两个日期相差天数
    前言 虽然现在处理日期方面已经有了很成熟的也很好用的库,例如(momentjs和date-fns),但是在实际开发中,我们有时候可能并不需要整个库。所以我就在下面整理了在前端开发时对日期时间的各种操作,也算是比较全的了。其中一部分来自自己,
  • 合并字符串的库函数指的是什么(字符串文本制表最)
    合并字符串的库函数指的是什么(字符串文本制表
    合并字符串的库函数是CONCATENATECONCATENATE。函数用于Excel中,可将最多255个文本字符串联接成一个文本字符串。MicrosoftExcel是Microsoft为使用Windows和AppleMacintosh操作系
  • js软件可以提供的信息(java编程软件工具使用)
    js软件可以提供的信息(java编程软件工具使用)
    V8 是 Google 发布的开源 Javascript 引擎,采用 C++ 编写,在 Google 的 Chrome 浏览器中被使用。V8 引擎可以独立运行,也可以用来嵌入到 C++ 应用程序中执行。 Javascript 引擎 V8
  • 脉冲响应函数分析主要说明什么(响应脉冲冲激系统)
    脉冲响应函数分析主要说明什么(响应脉冲冲激系
    脉冲响应函数分析主要说明将波形较理想的脉冲信号输入系统,按时域的响应方式记录下系统的输出响应,可以是响应曲线或离散值。在信号与系统或电路理论等学科中,冲激响应(或叫脉冲响应)一般是指系统在输入为单位冲激函数时的输出(响应)。对于连续时间系统
  • r软件安装教程(r程序包的安装流程)
    r软件安装教程(r程序包的安装流程)
    R软件安装 获取软件的安装包后,如果想要安装R-studio软件的话,得先安装好R,再安装R-studio,并且将他们安装到同一路径下,下面开始安装。 双击R安装程序,后缀为.exe程序。 这里建议将软件安装到电脑D盘或者E盘,
  • 一次函数b决定什么(函数斜率坐标系常)
    一次函数b决定什么(函数斜率坐标系常)
    一次函数b决定一次函数的截距,即原点到当x=0时函数的值,而其k决定一次函数的斜率,一条直线与某平面直角坐标系横坐标轴正半轴方向所成的角的正切值即该直线相对于该坐标系的斜率。一次函数是函数中的一种,一般形如y=kx+b(k,b是常数,k≠0
点击排行