IO文件——库——进程

标准IO与文件IO的区别

标准IO

概念:一组在C库中定义的用来输入输出的函数

特点:1、围绕文件流(FILE)进行操作。2、有缓冲区。3、默认打开三个流:标准输入、标准输出、标准错误。4、只操作普通文件。

文件IO

概念:在posix中定义的函数

特点:1、围绕文件描述符进行操作。2、没有缓冲区。3、默认打开三个文件操作符:标准输入、标准输出、标准错误。4、能操作除了目录以外的任何文件。

一、库的定义

将一些常用的函数打包在一起并提供函数的接口,以便于使用。本质上是可执行代码的二进制形式。

二、库的分类

库分为静态库与动态库,二者的区别在于代码被载入的时刻不同。

1、静态库在程序编译时会被链接到目标代码中

优点:程序运行时不再需要静态库;运行时无需加载库,运行速度更快

缺点:静态库体积大,且静态库升级之后需要重新编译链接

2、动态库是在程序运行时才被连接到代码中

优点:代码体积小,运行速度快。程序升级简单。不同的应用程序如果想调用相同的库,只需内存里有一份共享库。

缺点:一致性差

三、库的制作

1、静态库制作

第一步:将源文件编译成生成目标文件

gcc -c xxx.c -o xxx.o

第二步:创建静态库(使用ar命令,将.o转换为.a)

ar crs libmyxxx.a xxx.o(lib为固定前缀)

第三步:测试使用静态库

gcc main.c -L. -lmyxxx   //-L指定库的路径   -l指定库名

2、动态库的制作

第一步:创建共享库

gcc -fPLIC -c xxx.c -o xxx.o

-fPLIC是用来创建与地址无关的编译程序(就是不与路径进行关联)

gcc -shared -o libmyxxx.so xxx.o

第二步:测试动态库使用

gcc main.c -L -lmyxxx

通常可以正常编译通过,但是会遇到运行时报错:

./a.out: error while loading shared libraries: libmyadd.so: cannot open shared object file: No such file or directory

原因:当加载动态库时,系统会默认从/lib或者/usr/lib路径下查找文件

解决方法:

(1)把库拷贝到/usr/lib和/lib目录下。(此方法编译时不需要指定库的路径)

(2)在LD_LIBRARY_PATH环境变量中加上库所在路径。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

(终端关闭,环境变量就没在了)

(3) 添加/etc/ld.so.conf.d/*.conf文件。把库所在的路径加到文件末尾,并执行ldconfig刷新

sudo vi xx.conf

遇到错误:

解决方法:

进程

一、概念

1、程序与进程的区别

程序:是编译好的可执行文件,程序是静态的,没有执行的概念

进程:是程序的一次执行过程,进程是动态的,包括创建,调度,执行,消亡。

2、进程的特点

1)系统会为每一个进程分配虚拟空间,包括用户空间与内核空间

2)轮转调度:时间片,系统为每个进程分配时间片,当一个进程的时间片用完时,CPU调度另一个进程,从而实现进程调度的切换

3、进程段

在Linux系统中包括三个段

数据段:存放全局变量,常数,以及动态数据分配的数据空间(例如malloc)

正文段:存放程序中的代码

堆栈段:存放函数的返回地址,函数的参数,以及程序中的局部变量

4、进程分类

交互进程:该类进程是由shell控制和运行的。交互进程既可以在前台运行,也可以在后台运行。该类进程经常与用户进行交互,需要等待用户的输入,当接收到用户的输入后,该类进程会立刻响应,典型的交互式进程有:shell命令进程、文本编辑器等

批处理进程:该类进程不属于某个终端,它被提交到一个队列中以便顺序执行

守护进程该类进程在后台运行。它一般在Linux启动时开始执行,系统关闭时才结束

ps -aux 中 ? 部分是守护进程

5、进程状态

1)运行态(TASK_RUNNING):R

指正在被CPU运行或者就绪的状态。这样的进程被成为runnning进程。

2)睡眠态(等待态):

可中断睡眠态(TASK_INTERRUPTIBLE)S:处于等待状态中的进程,一旦被该进程等待的资源被释放,那么该进程就会进入运行状态。

(只能通过特定的函数进行唤醒,是不能随便去中断的)

不可中断睡眠态(TASK_UNINTERRUPTIBLE)D:该状态的进程只能用wake_up()函数唤醒。

3)暂停态(TASK_STOPPED):T

当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。

4)死亡态:进程结束 X

5)僵尸态:Z 当进程已经终止运行,但还占用系统资源,要避免僵尸态的产生

< 高优先级

N 低优先级

s 会话组组长

l 多线程

+ 前台进程

6、进程状态的切换

程创建后,进程进入就绪态,当CPU调度到此进程时进入运行态,当时间片用完时,此进程会进入就绪态,如果此进程正在执行一些IO操作(阻塞操作)会进入阻塞态,完成IO操作(阻塞结束)后又可进入就绪态,等待CPU的调度,当进程运行结束即进入结束态。

就绪状态:

当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。

执行状态:

当进程已获得处理机(CPU),其程序正在处理机上执行,此时的进程状态称为执行状态。

阻塞状态:

正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值