• 实验六 进程基础


    实验六 进程基础

    项目 内容
    这个作业属于哪个课程 <班级课程的主页链接 >
    这个作业的要求在哪里 <作业要求链接接地址>
    学号-姓名 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

  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/liyingji/p/12806146.html
Copyright © 2020-2023  润新知