IO-day4-目录、进程

一、目录的操作

1.opendir--打开目录

IO-day4-目录、进程_第1张图片

 1)参数:目录名,可以是一个文件路径

 2)成功返回目录地址,失败返回NULL,并置位错误码

2.readdir--读取目录(通过给定的目录指针获取到目录下的内容)

 1)参数:目录指针

2)成功返回struct dirent的指针,也是目录中内容的相关信息,失败返回NULL,如果读到目录结束位置则不更新错误码,如果读取错误,则更新错误码

IO-day4-目录、进程_第2张图片

 IO-day4-目录、进程_第3张图片

 3.closedir--关闭目录

IO-day4-目录、进程_第4张图片

 1)参数:目录指针

2)成功返回0,失败返回-1并置位错误码

IO-day4-目录、进程_第5张图片

 二、linux中库的制作

库:二进制文件,由.c文件编译而来(文件中无main函数)

库的本质:源程序编译生成二进制文件,使用时更加安全可靠

库的分类:静态库动态库IO-day4-目录、进程_第6张图片

 1.静态库

1)静态体现在:当gcc编译的时候,会将你的主程序和库最终生成一个可执行程序,使用时就不需要在去其他地方找库的位置了,这就导致可执行程序的大小比较大,由于直接将库中的内容封装在可执行程序中了,所以使用起来比较方便,效率较高,缺点是可执行程序体积较大。

2)由.c程序--------编译---------->lib库名.a(二进制文件)

IO-day4-目录、进程_第7张图片

 3)使用静态库

IO-day4-目录、进程_第8张图片

 IO-day4-目录、进程_第9张图片

 ---多文件进行编译-----

IO-day4-目录、进程_第10张图片

 2.动态库--二进制文件

1)动态体现在: gcc编译程序时,会将你的主程序和库中的函数的符号表编译生成一个可执行程序,当执行可执行程序时,使用该函数时,会通过符号表找到动态库的位置,然后调用该动态库中的函数。效率没有静态库的高,但是,可执行程序的体积较小,多个程序可以共享同一个动态库,所以,动态库又被称为共享库
2)2)由.c程序--------编译---------->lib库名.so(二进制文件)

IO-day4-目录、进程_第11张图片

 3)使用动态库

IO-day4-目录、进程_第12张图片

IO-day4-目录、进程_第13张图片

 4)当执行可执行文件时,会报如下错误

三个解决办法: 

(1)export LD_LIBRARY_PATH=路径

 在命令行中,输入指定,更改库的路径,但是该操作只在当前终端有效

 (2)将自定义的库放入/uer/lib或者/lib中,也可以进行操作

IO-day4-目录、进程_第14张图片

 (3)更改根目录下的sudo vi /etc/ld.so.conf.d/libc.conf,将自定义的库的路径放入该文件中即可

 三、多进程

1.进程

1)进程:正在执行的程序(程序的一次执行过程)
     进程就是正在执行的任务,是一个动态的过程,有生命周期,会随着进程的创建而分配资
源,随着进程的消亡而释放资源


2)进程是计算机分配资源的最小单位,每个进程计算机都会为其分配4G虚拟内存,其中0-
-3G是用户空间,3--4G是内核空间
      每个进程都独立拥有自己的O--3G的用户空间,并且所有进程会共享3--4G的内核空间0--3G的用户空间,又分为:栈区、堆区、静态区
3--4G的内核空间中,通过一个task_struct类型的结构体来表述一个进程,进程控制块:pcb

IO-day4-目录、进程_第15张图片
3) 进程之间是相互独立的,可以单独被调度器进行调度系统在调度;进程时的调度原则:时间片轮询,上下文切换
IO-day4-目录、进程_第16张图片

 2.进程、程序区别

进程:进程是动态的,是程序的一次执行过程,有生命周期,多个进程拥有自己的O--3G的用户空间,共享3--4G的内核空间
程序:程序是
静态的,没有所谓的声明周期,只是存储在磁盘上的二进制文件而已
 

 3.进程的组成

进程控制块(PCB)、数据段程序段

IO-day4-目录、进程_第17张图片

 4.进程种类(三种)

交互进程:他是有shell脚本控制,可以直接跟用户进行交互,例如:文本编辑器

批处理进程:维护了一个队列,被放在队列中的进程,同一进行操作,但是需要制定进程的优先例如使用gcc编译器一步到位进行编译程序级

守护进程(服务):脱离了终端而存在,会随之系统的启动而运行,随之系统的关闭而消亡,例如:计算机中的服务进程

5.进程PID

PID(process id):进程唯一标识,是>=0的整数,每个pid都是独一无二的,且linux系统中,进程数有限

指令:cat/proclsys/kernel/pid_max

IO-day4-目录、进程_第18张图片

 PPID:父进程id号

6.特殊进程

系统启动,默认启动三个进程,进程号为0、1、2

0号进程(idel)︰他是linux系统在启动时,默认启动的第一个进程,这个进程叫做空闲进程,当没有其他进行执行时,才会执行该进程
1号进程(init):该进程是由0进程产生,用于完成进程的初始化工作,当某个进程的父进程结束,那么这个进程就是孤儿进程,孤儿进程会被1号进程收养
2号进程 (kthreadd):该进程也是由0号进程产生,也被称为调度进程,当某个进程的时间片用完后,由2号进行完成调度功能

7.进程相关linux指令

1)查看进程指令:ps

(1)ps -ef      显示进程间关系

IO-day4-目录、进程_第19张图片

 (2)ps -ajx    常用显示进程状态

IO-day4-目录、进程_第20张图片

 (3)ps -aux     可显示进程所在计算机资源的百分比

IO-day4-目录、进程_第21张图片

 2)给进程发信号kill指令

(1)kill -l:查看所有信号

(2)kill -信号号 PID   :给一个进程发信号

(3)killall 进程名:杀死所用名为进程名的进程

(4)pidof 可执行程序名:查看某个进程的pid

(5)top:动态查看运行的进行状态;htop:带颜色动态查看进程运行状态

(6)pstree:显示进程关系树

IO-day4-目录、进程_第22张图片

 3)进程状态

man ps查看

4)进程切换

IO-day4-目录、进程_第23张图片

 (1)bg 作业号  :后台运行

           作业号:jobs -l

 (2)fg 作业号   :前台运行

8.进程创建

 1)fork函数-------进程创建

IO-day4-目录、进程_第24张图片

(1)功能:通过拷贝父进程得到子进程

(2)返回值:     成功,父进程会得到子进程的pid的值,子进程中得到的是o
                          失败返回父进程中返回-1,子进程创建失败,并置位错误码

IO-day4-目录、进程_第25张图片

你可能感兴趣的:(数学建模,c语言)