一·动静态库
1.先编写源文件和头文件:add.c ,sub.c,mul.c,div.c,math.h
math.h
1 #ifndef __MYMATH_H__
2 #define __MYMATH_H__
3 int add(int x,int y);
4
5 int sub(int x,int y);
6
7 int mul(int x,int y);
8
9 int div(int x,int y);
10 #endif //__MYMATH_H__
2.动静态库的生成:
(1)将所有的.c文件生成.o文件
(2)makefile自动生成动静态库
1 libmymath.a libmy.so:add.o sub.o mul.o div.o
2 ar -rc libmymath.a $^
3 gcc -fPIC -shared -o libmy.so $^
4 add.o sub.o mul.o div.o:add.c sub.c mul.c div.c
5 gcc -c add.c -o add.o -g
6 gcc -c sub.c -o sub.o -g
7 gcc -c mul.c -o mul.o -g
8 gcc -c div.c -o div.o -g
3.使用libmymath.a和libmy.so的方法
先编写一个test.c文件,里边用到该静态库中的函数
静态库(mymath.a): gcc test.c -I./ -L./ -lmymath
说明:-I 后边跟头文件的路径,如果不写,默认在当前目录下搜索
-L 后边跟库的路径 ,如果不写,默认在系统指定的目录下搜索
-l 后边跟库名,指定要用哪个库
动态库(my.so): 生成库后,首先设置环境变量 export LD_LIBRARY_PATH=动态库的搜索路径
gcc test.c -I./ -L./ -lmy
二·基础I/O
1.系统调用接口:open,close,read,write,lseek等
如果文件不存在,需要open创建,则第三个参数表示创建文件的默认权限,否则,使用两个参数
2.文件描述符fd
本质:一个从0开始的小整数,就是files_struct这个指针数组的下标,这个数组指向该进程打开的文件。所以只要拿到下标就可以找到该文件
3.重定向
本质:将该进程打开的1号文件关闭,再打开目标文件,则这个目标文件的fd就是1,即要输出到显示器上的文件输出到了目标文件中