初识linux(day 06) 📅 2026/8/25 14:26:35 今天介绍的有以下五个内容1.printf 的缓冲区问题 2.静态库的创建和使用 3.共享库的创建和使用 4.静态库与共享库的区别 5.各种命令库等文件的标准存放位置一printf 的缓冲区问题printf ( )的输出原理将需要打印在屏幕上的东西先存入缓冲区之中在缓冲区满足以下三种情况时会将缓冲区中的内容全部打印在屏幕之上:1.缓冲区满了 2.强制刷新缓冲区 \n ,fflush(stdout) (fflush刷新文件 stdout屏幕输出文件) 3.程序要退出了 exit()第一步刷新缓冲区 第二步_exit()退出程序在后面才会介绍到的fork函数中printf的缓冲区问题会被再次提到他对于输出结果的影响非常大本质上printf()其中调用了write()printf()中的数据先存放在缓冲区中在缓冲区刷新后将缓冲区的数据放入调用的write中从而进行打印write()不存入缓冲区直接进行打印 相较于printf( )write( )缺少用户态缓冲,每次调用都会触发系统调用大量短小输出时上下文切换频繁性能差 而printf( )自带用户态缓冲区在多次零散输出时会合并成少量系统调用 减少用户态→内核态上下文切换高频少量 IO 场景使性能更高二静态库的创建和使用**库**已经编译好的函数的集合静态库libxx.a 使用时会将库中函数的实现拷贝到文件中静态库的创建ar crv -o libxx.a xx1.o xx2.o ……xx1.o xx2.o …… 待打包的目标文件先由 gcc -c xxx.c 编译生成静态库的使用gcc -o main main.c -L路径 -l库名(如果生成的库放在了标准库中可以省略路径)三共享库的创建和使用共享库libxx.sowin中叫动态链接库在使用库时如果共享库和静态库同名Linux系统会默认使用共享库ldd命令:ldd程序名 查看程序所使用到的共享库共享库的创建gcc -shared -fPIC -o libxx.so xx1.o xx2.o ……xx1.o xx2.o …… 待打包的目标文件先由 gcc -c xxx.c 编译生成共享库的使用gcc -o main main.c -L路径 -l库名使用时默认在在/usr/lib 或/lib下查找 可省去地址当共享库不在标准位置时使用命令LD_LIBRARY_PATH. (将当前位置赋给变量共享库的储存路径)export LD_LIBRARY_PATH (将变量设置为环境变量)gcc -o main main.c -L路径 -l库名四静态库与共享库的区别静态库使用静态库会把库函数拷贝到可执行程序中但只拷贝用到方法函数共享库共享库只做标记不进行拷贝在运行程序时还需要链接共享库装载到内存中多个程序可共享使用 并不包含到可执行程序中共享库更利于程序的升级五各种命令库等文件的标准存放位置头文件的标准位置/usr/include存放二进制可执行程序命令的标准位置/usr/bin/bin存放库文件的标准位置/usr/lib/lib…