一、概述
之所以要写这个,是因为发现了一个很有趣的问题:我在SecureCRT开了两个终端登陆系统,一个是串口,一个是telnet,
无论我在哪个终端调用printk,信息都会被打印在串口终端,巴特无论在哪个终端调用printf信息都会被打印在这个终端
上(类似的还有echo命令,但没去研究这个命令的源码),为什么会产生这种现象,printf最后调用了什么。
首先要引入glibc的概念
二、glibc
2.1 什么是glibc?
glibc是GNU发布的libc库,是标准C的gnu实现,基于GPL的。glibc库提供了系统调用和标准C函数库,所有动态连接的
程序都要用到它。说白了就是它提供了linux用户编程所用到的所有库函数(自己定义的除外)。但它并不直接实现系统调用,而是把标准C库和系统调用全部封装成API提供给用户,比如用户调用read
函数的时候,会直接调用glibc的read函数(API),这个read函数里会封装一个同名的read系统调用。
它linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc,linux下的gcc默认使用glibc。
在linux下面可以通过“rpm -q glibc”查看有没有安装glibc以及版本号
2.2 glibc的内容
分享函数库群:
这是 glibc 的主体,分布 /lib 与 /usr/lib 中,包括 libc 标准 C 函数库、libm 数学函数库、libcrypt 加密与编码
函数库、libdb 资料库函数库、libpthread 行程多执行绪函数库、libns