项目 | 内容 |
---|---|
这个作业属于那个课程 | 这里是链接 |
作业要求在哪里 | 这里是链接 |
学号-姓名 | 17041506-张政 |
作业学习目标 | 掌握Linux系统环境C语言编程概念;学习Linux系统进程概念 |
1.举例说明静态链接库的创建与使用。
1.1什么是库
- 博主想用比较浅显的说法来解释:库就是一堆代码,包含某些代码函数,包含某些算法,将这个代码封装,从而提高编程效率。这是一个很广泛的使用,机器学习领域有很多库,大多是算法的集成,神经网络的集成;图像处理领域里很有名的opencv就是一个开源库,将一个又一个视觉算法包装成API,方便其它程序员调用;不同的编程语言里也有库,Java有Java的库,C+有C+的库,Python有Python的库。在不同的操作系统平台,也有自己的库,Windows有Windows的库,Linux有Linux的库,当然一般库不能通用,这两者的编译器不同。
1.2Linux中的静态库和动态库
- 两者的区别在于,静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。而共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。
1.3静态链接库的创建、使用
ar -r libbase.a add.o
ar -r libbase.a sub.o
- 以上两行就是生成静态库add与sub
2.举例说明共享库的创建与使用。
2.1共享库的创建、使用
- 创建libbase.so的共享库
gcc -Wall -shared -o libbase.so add.o sub.o
- 使用(生成可执行文件output)
gcc -Wall -g -o output main.c ./libbase.so
3.编程实现一个简单文件复制命令。
*这里是代码(这里有坑,注意Linux里0和大写的O一样,博主看到错误,人傻)
- 这里是结果
4.使用fork创建一个子进程,进程创建成功后父子进程分别输出不同的内容。
- 代码
- 结果
- 输出重定向
5.使用fork创建多个子进程。
- 代码
- 结果
- 代码(sleep函数)
- 结果
6.在 fork 之前以写的方式创建了一个文件 test.txt。然后 fork 出的子进程立即向文件中写入“world”,然后睡眠5秒。而父进程在 fork 后睡眠3秒后向 test.txt 写入 "hello",并关闭描述符。子进程恢复后,又向 test.txt 文件中写入 "lalala"后关闭描述符,结束。
- 代码
- 结果
7.分别在主函数中使用execvp启动ls命令以及使用fork函数产生子进程调用execvp启动ls。
- 代码
- 结果
- 代码
- 结果
8.创建5个僵尸进程,并在终端通过ps axf命令查看僵尸进程信息。
- 代码
- 结果
9.通过wait来清理僵尸进程。
- 代码
- 结果
10.父进程通过waitpid函数等待特定子进程结束,若该子进程不结束,父进程一直阻塞。
- 代码
- 结果