一、系统调用和库函数
1.系统调用
操作系统向用户提供的函数接口,通过这些函数接口进入内核空间,使用内核提供的功能
2.库函数
别人实现好的函数接口,使用者不需要自己实现,直接调用就可以
-
GNU C库(glibc)提供的函数接口
open/read/write/lseek/close 这些函数接口直接和系统调用关联
-
标准C库提供的函数接口:
fopen/fgetc/fgets/fread/fputc/fputs/fwrite/fseek/ftell/rewind/fclose
问题:库和实现的函数的代码有什么区别?
实现的代码是一个文本文件,可见,可以被别人使用,安全性不好
库是别人代码编译之后的二进制文件,不可见,可以被别人使用,安全性好
二、Linux 下的库
gcc编译流程:预处理、编译、汇编、链接(链接库和xxx.o文件生成一个可执行文件)
1.动态库
windows : name.dll
Linux : libname.so
当编译器链接动态库的时候,会在可执行文件的头信息中记录库的名字,便于在操作系统执行这个可执行文件的时候,让操作系统去加载对应的动态库。
注意:
- 当操作执行可执行文件时候,会先读取可执行文件的头信息,然后加载头信息中记录的动态库到内存中运行
- 在可执