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

    项目 内容
    这个作业属于哪个课程 <班级课程的主页链接 >
    这个作业的要求在哪里 < 作业要求链接接地址 >
    学号-姓名 17041525-张思河
    作业学习目标 1、 掌握Linux系统环境C语言编程概念 2、 学习Linux系统进程概念
    1. 请举例说明静态链接库的创建与使用。

    ar 			#静态函数库创建命令
    -c 			#create
    -r 			#replace
    -static		#指定编辑器链接静态库
    gcc main.o libbase.a -o app	#链接成可执行文件
    
    1. 请举例说明共享库的创建与使用。
     初始的目录结构
    

    1、创建共享库
    

    -fpic		#产生代码位置无关代码
    -shared		#生成共享库
    
    2、使用自己的共享库(两种方式)
    

    1)、指定相对路径

    -I../include #在头文件的搜索路径列表中添加到指定目录
    

    2)、只给链接器动态库名称(需要后面添加一个环境变了才可正常运行)

    ldd ../bin/app	#查看可执行文件依赖的动态链接库
    
    1. 编程实现一个简单文件复制命令。

    ./copy copy.c -o test	#复制文件
    diff copy.c test		#逐行的方式比较文本的异同处
    

    复制文件--test:

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

    删除了代码中的fflush(null)后,运行结果多了一个Begin!
    

    全缓冲与行缓冲

    全缓冲 :全缓冲指的是系统在填满标准IO缓冲区之后才进行实际的IO操作;注意,对于驻留在磁盘上的文件来说通常是由标准IO库实施全缓冲。

    行缓冲 :在这种情况下,标准IO在输入和输出中遇到换行符时执行IO操作;注意,当流涉及终端的时候,通常使用的是行缓冲。

    删除
    所得结果
    

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

    使用sleep函数简单控制进程输出顺序
    

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

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

    使用execvp启动ls命令
    

    使用fork函数产生子进程调用execvp启动ls
    

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

    开启新的终端,并输入pa axf
    pa axf	#显示进程关联树
    

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

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

  • 相关阅读:
    51nod乘积之和
    Dell服务器安装OpenManage(OMSA)
    Nginx反向代理PHP
    搭建haproxy
    108. Convert Sorted Array to Binary Search Tree
    60. Permutation Sequence
    142. Linked List Cycle II
    129. Sum Root to Leaf Numbers
    118. Pascal's Triangle
    26. Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/zhangsihe/p/12837237.html
Copyright © 2011-2022 走看看