Linux进程基础

项目 内容
这个作业属于那个课程 这里是链接
作业要求在哪里 这里是链接
学号-姓名 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函数等待特定子进程结束,若该子进程不结束,父进程一直阻塞。

  • 代码

  • 结果

posted @ 2020-05-07 14:59  anhui_first_handsome  阅读(155)  评论(0编辑  收藏  举报