今天依旧学习了操控目录的函数,还有一些理论知识
1、opendir函数:
头文件:sys/types.h dirent.h
DIR *opendir(const char *name)
参数1:目录流指针
功能:打开一个目录。
成功后返回一个目录流指针,失败后返回NULL;
2、closedir函数:
头文件:sys/types.h dirent.h
int closedir(DIR *dirp)
参数:目录流指针
功能:关闭打开的目录
成功后返回0,失败后返回-1;
3、readdir函数:
头文件:dirent.h
struct dirent *readdir(DIR *ditp)
参数:目录流指针
功能:获取目录中文件的信息
成功后返回文件信息的结构体,失败后返回NULL;
4、函数库
本质上来说就是可执行代码的二进制形式,是一种别人写好的,成熟的可以复用的看不懂的二进制的文件。
静态库:是在代码编译和链接时完成的,运行时与函数库无关,和代码在一起移植起来方便,但是每个函数都要空间,比较浪费空间和资源,代码体积大。
动态库:是在代码运行时完成的,在编辑时不会链接到目标代码中,因此可以共享,代码体积小
。
构建一个静态库:
1、我们自己先建个个人定义的函数文件如(fun.c)然后通过指令生成库文件所需要的功能函数的可重定向文件。 gcc -c fun.c -o fun.o
2、然后生成静态库文件 。 ar crs libfun.a fun.o lib和.a分别为库文件的前缀静态库文件的后缀。
3、接着编辑运行: gcc main.c -o main -L. -lfun
-L 指定库的路径, -l 指定库的名字
构建一个动态库:
1、生成制作库文件所需要的功能函数的可重定向文件
gcc -fPIC -c -o fun.o fPIC生成与位置无关的代码(s生成的动态库文件的内存上,可自动寻找一块内存区域)
2、生成动态库文件:
gcc -shared fun.o -o libfun.so .so 动态库文件后缀
3、gcc main.c -o main -lfun
直接编译会失败,原因是直接编译会找不到动态库文件,
5、进程
计算机中每一个正在运行的程序的实列叫进程,每个进程都有一定的内存空间,进程建立都会分配一个进程控制块(PCB每个PCB都有一个特定的进程号)里面会记录这进程的相关信息;
进程与程序的区别:进程是一个动态的概念,是正在运行的程序,消耗的是系统的物理内存。而程序是储存在磁盘上的可执行文件,是一个静态的概念;
进程的执行有并发和并行两种,并发指的在同一时刻有多个进程在运行。而并行指的同一时间段有多个进程在运行,但同一时刻只有一个进程在有运行,因为对于计算机而言这个时间段很短,所以感觉进程在同时运行;而至于进程运行的顺序,有相关的进程调度算法;
进程的三种基本状态:
详细的还可以分为五种、七种;
6、fork进程函数
头文件:sys/types.h unistd.h
pid_t fork(void)
功能:当前进程创建子进程
成功后在父进程中返回子进程的进程号,在子进程返回0。失败返回-1;
7、getpid函数:
头文件:sys/types.h unistd.h
pid_t getpid(void)
功能:获取当前进程的进程号
成功后返回当前进程号(pid_t类型),失败后返回-1;