1.1. 初始化字符串

    1.3. 拷贝字符串

    1.5. 比较字符串

    1.7. 分割字符串

    2.1. 文件的基本概念

    2.4. errno与perror函数

    2.6. 操作读写位置的函数

    2.8. 以记录为单位的I/O函数

    2.10. C标准库的I/O缓冲区

    3. 数值字符串转换函数

    在前面的各章中我们已经见过C标准库的一些用法,总结如下:

    • 第 1 节 “数学函数”中用到了math.h中声明的sinlog函数,使用这些函数需要动态链接libm共享库。

    • 在中用到了stdlib.h中声明的exit函数,使用这个函数需要动态链接共享库。

    • 第 6 节 “折半查找”中用到了assert.h中定义的assert宏,在中我们看到了这个宏的一种实现,它的实现需要调用stdio.hstdlib.h中声明的函数,所以使用这个宏也需要动态链接libc共享库。

    • 第 1 节 “本章的预备知识”中介绍了stdlib.h中声明的mallocfree函数以及string.h中声明的strcpystrncpy函数,使用这些函数需要动态链接libc共享库。

    • 在中介绍了stdarg.h中定义的va_list类型和、va_startva_end等宏定义,并给出了一种实现,这些宏定义的实现并没有调用库函数,所以不依赖于某个共享库,这一点和assert不同。

    总结一下,Linux平台提供的C标准库包括:

    • 一组库文件,提供了库函数的实现。大多数库函数在libc共享库中,有些库函数在另外的共享库中,例如数学函数在libm中。在第 4 节 “共享库”讲过,通常libc共享库是/lib/libc.so.6,而我的系统启用了hwcap机制,libc共享库是/lib/tls/i686/cmov/libc.so.6

    本章介绍另外一些最基本和最常用的库函数(包括一些不属于C标准但在UNIX平台上很常用的函数),写这一章是为了介绍字符串操作和文件操作的基本概念,而不是为了写一本C标准库函数的参考手册,Man Page已经是一本很好的手册了,读者学完这一章之后在开发时应该查阅Man Page,而不是把我这一章当参考手册来翻,所以本章不会面面俱到介绍所有的库函数,对于本章讲到的函数有些也不会讲得很细,因为我假定读者经过上一章的学习再结合我讲过的基本概念已经能看懂相关的Man Page了。很多技术书的作者给自己的书太多定位,既想写成一本入门教程,又想写成一本参考手册,我觉得这样不好,读者过于依赖技术书就失去了看真正的手册的能力。