zoukankan      html  css  js  c++  java
  • 实验六 进程基础

    实验六 进程基础

    项目 内容
    这个作业属于哪个课程 <班级课程的主页链接 >
    这个作业的要求在哪里 <作业要求链接接地址>
    学号-姓名 17043115-李映霁
    作业学习目标 1.掌握Linux系统环境C语言编程概念
    2.学习Linux系统进程概念

    实验内容

    1.请举例说明静态链接库的创建与使用。

    (1)、静态库的创建

    因为,创建静态连接库需要用到.o文件,因此我们先建立两个.c文件生成.o文件,其分别是add.c->add.o

    sub.c->sub.o;结果如下图所示:

    此时已经生成了静态库libbase.a,可以用ar -t查看库里面的内容,操作结果如下所示:

    (2)、静态库的使用

    因为建立的静态库是一个函数,所以需要建立一个主函数,使用静态库操作如下所示:

    2.请举例说明共享库的创建与使用。

    为了方便函数声明的管理,我们首先创建一个common.h文件,将我们平常所写的函数在这个文件中声明一下,然后在主函数文件中直接调用该文件即可,修改后的主函数和common.h文件源码如下所示

    !!!注意下面2张图的区别,第一张图不可用#include<common.h>来包含头文件,改为#include "common.h"

    查看一下未创建共享库之前的目录结构,如下图所示:

    目录已做处理,步骤已省略

    (1)、创建共享库

    (2)、使用共享库

    可以使用ldd指令查看共享库,操作结果如下图所示:

    image-20200429182937254

    运行可运行文件操作结果如下图所示:

    3.编程实现一个简单文件复制命令。

    创建一个copy.c文件,写入图片中代码

    将其生成可运行文件,其操作与对比如下所示:

    创建空文件test_1,利用生成的文本复制命令copy将copy.c中的内容复制到test_1中,操作结果如下所示:

    4.使用fork创建一个子进程,进程创建成功后父子进程分别输出不同的内容。

    创建文件fork1.c,然后输入下图所示代码:

    编译fork1.c并且运行生成的文件,结果如下图所示:

    还可以将进程输出重定向到其他文件中,在此处,我们把它重定向到src文件夹下的out文件中,结果如下所示

    5.使用fork创建多个子进程。

    创建文件fork2.c,然后输入下图所示代码:

    编译fork2.c并且运行生成的文件,结果如下图所示:

    发现代码有一个子进程输入在父进程后面,如果需要先输入子进程,最后输入父进程,只需要假如sleep函数,更改结果和更改后操作结果如图所示:

    6.在 fork 之前以写的方式创建了一个文件 test.txt。然后 fork 出的子进程立即向文件中写入“world”,然后睡眠5秒。而父进程在 fork 后睡眠3秒后向 test.txt 写入 "hello",并关闭描述符。子进程恢复后,又向 test.txt 文件中写入 "lalala"后关闭描述符,结束。

    创建文件forkwrite.c,然后输入下图所示代码:

    编译forkwrite.c并且运行生成的文件,结果如下图所示:

    7.分别在主函数中使用execvp启动ls命令以及使用fork函数产生子进程调用execvp启动ls

    (1)、使用execvp启动ls命令

    创建文件execls.c,然后输入下图所示代码:

    编译execls.c并且运行生成的文件,结果如下图所示:

    (2)、使用fork函数产生子进程调用execvp启动ls

    创建文件forkandexec.c,然后输入下图所示代码:

    编译forkandexec.c并且运行生成的文件,结果如下图所示:

    8.创建5个僵尸进程,并在终端通过ps axf命令查看僵尸进程信息。

    创建文件mywait.c,然后输入下图所示代码:

    编译mywait.c并且运行生成的文件,结果如下图所示:

    9.通过wait来清理僵尸进程。

    创建文件wipeout.c,然后输入下图所示代码:

    编译wipeout.c并且运行生成的文件,结果如下图所示:

    10.父进程通过waitpid函数等待特定子进程结束,若该子进程不结束,父进程一直阻塞。

    创建文件lastwaitpid.c,然后输入下图所示代码:

    编译lastwaitpid.c并且运行生成的文件,结果如下图所示:

    由结果知,当子进程不结束的时候,父进程就阻塞,但是当子进程结束后,父进程关注于自己的工作,即输出father do self

  • 相关阅读:
    通过PMP了
    VBA之自动建立连接
    从头学SQL Server2005之一:数据库引擎体系结构
    SMP、NUMA、MPP体系结构介绍【转】
    将Windows2003的RDP客户端管理应用于XP
    VBA中简单修改原有公式的宏
    各种Excel VBA的命令
    领导和管理的区别在哪里?【转】
    COM(VB/VBA/Script)利用服务标记调用WCF服务之四:使用配置文件
    2009年第一篇日志
  • 原文地址:https://www.cnblogs.com/liyingji/p/12806146.html
Copyright © 2011-2022 走看看