库文件 是一组预先编译好的函数的集合。通常由一组相互关联的函数组成以执行某项常见的任务。
标准系统库文件一般存储在/lib 和 /usr/lib目录中,C语言编译器(链接程序)默认只搜索标准C语言库。
库文件的名字总是以lib开头,随后的部分指明这是什么库。
文件名的最后部分 后缀表示库文件的类型。
.a代表传统的静态函数库
.so代表共享函数库
可以通过使用-L 标志为编译器增加搜索路径
静态库
也称作归档文件(archive),按惯例文件名以.a结尾
可以使用ar程序和使用gcc -c命令对函数分别进行编译,创建静态库
1.创建函数代码源文件
2.gcc -c xxx.c yyy.c创建包含在库文件中的目标文件(-c选项的作用是阻止编译器创建一个完整的程序)
3.为库文件创建一个头文件。头文件将声明库文件中的函数。使用库文件的程序包含该头文件
4.创建库文件,使用ar程序创建一个归档文件并将目标文件添加进去
$ ar crv libfoo.a xxx.o yyy.o
5.使用函数库
gcc -o program program.o libfoo.a
共享库
静态库的一个缺点,当同时运行许多应用程序并且它们都是用来自同一个函数库的函数时,内存中就会有同一函数的多份副本,而且在程序文件自身中也有多份同样的副本,消耗了内存和磁盘空间。
当一个程序使用共享库时,程序本身不再包含函数代码,而是引用运行时可以访问的共享代码,当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如有必要,共享库才会被加载到内存中。
共享库的更新也可以独立于依赖它的应用程序。
libm.so.N N表示主版本号
linux系统中负责装载共享库并解析客户程序函数引用的程序(动态装载器)是ld.so,也可能是 ld-linux.so.2 、ld-lsb.so.2或ld-lsb.so.3.用于搜索共享库额外位置可以在/etc/ld.so.conf中配置。如果修改了这个文件,需要执行命令ldconfig来处理它
工具ldd可以查看一个程序需要的共享库
$ldd program
共享库类似于Windows中使用的动态链接库。.so库对应于.DLL文件,都是在程序运行时加载,而.a库类似于.LIB文件,都包含在可执行程序中。
===============
/dev/null linux通用”回收站”
$ grep -l string * 列出当前目录 包含字符串string 的文件名
shell语法:
在shell中,变量不需要预先声明,直接赋值使用,使用$a 读取变量的内容,echo $a
[ ]或test,布尔判断命令
if test -f xxx.c 或 if [ -f xxx.c] 如检查某一文件是否存在
控制结构:
if语句:
if condition
then
statements
elif condition
then
statements
else
statements
fi
for 语句:
for variable in values
do
statements
done
while 语句:
while condition ; do
statements
done
until语句:一直执行,直到条件为真
until condition
do
statements
done
==================
有用命令:
find [path][options][tests][filename][actions]
find / -name t1.c -print 从根目录查找本机 名为t1.c的文件
find / -mount -name t1.c -print (-mount不要搜索挂载的其他文件系统的目录)
=======================
/proc 文件系统
Linux提供了一个特殊的文件系统proofs,它通常以/proc目录的形式呈现。该目录中包含了许多特殊文件用来对驱动程序和内核信息进行更高层的访问。
例如:
/proc/cpuinfo
/proc/meminfo
/proc/net/sockstat 获得网络套接字的统计
/proc/sys/fs/file-max 系统中所有运行的程序同时能打开的文件总数
/proc 目录中以数字命名的子目录用于提供正在运行的程序的信息。