IO进程线程

【标准IO】

定义         在C库中定义的一组专门用于输入输出的函数
特点         1.通过缓冲机制减少系统调用的次数,提高效率。
                2.围绕流进行操作的,流用FILE *描述,FILE是结构体,保存文件的属性信息。
                3.默认打开了三个流,stdin(标准输入)、stdout(标准输出)、stderr(标准错误) 
缓冲区
全缓存  和文件相关
刷新缓存的条件:
        1.程序正常退出
        2.缓存区满刷新
        3.fflush强制刷新
行缓存  和终端相关
刷新缓存的条件:
        1.程序正常退出
        2.\n刷新
        3.缓冲区满刷新
        4.fflush强制刷新
不缓存  没有缓存区,标准错误
计算标准输出的缓存区大小:
printf(“\n”);//调用输出
printf(“%d”,stdout->_IO_buf_end-stdout->_IO_buf_base);

【文件IO】
定义
在posix(可移植操作系统接口)中定义的一组用于输入输出的函数
posix:可移植操作系统接口
unix:操作系统
linux:操作系统

特点
1、没有缓冲机制,每次操作都引起系统调用
2、围绕文件描述符进行操作,文件描述符是非负整数(>=0),顺序分配
3、默认打开三个文件描述符:0(标准输入)、1(标准输出)、2(标准错误)
4、可以操作任意类型的文件,除目录

【文件IO与标准IO对比】

标准I/O

文件IO

概念

C库中定义的一组用于输入输出的函数

系统中定义的一组用于输入输出的函数

特点

1)有缓冲机制,减少系统调用

2)围绕文件流进行操作

3)默认打开三个文件流,stdin、stdout、stderr

4)只能对普通文件进行操作

1)无缓冲机制,每次都要系统调用

2)围绕文件描述符进行操作

3)默认打开3个文件描述符,0,1,2

4)可以对任意类型文件操作,目录除外

函数

打开文件:fopen freopen

关闭文件:fclose

文件读写:fgetc fputc fgets fputs fread fwrite

文件定位操作:fseek ftell rewind

打开文件:open

关闭文件:close

文件读写:read write

文件定位操作:lseek

终端输入:diff 文件一 文件二:对比两个文件有无不同
 

【库】
库文件:头文件:#include <stdio.h>
                             #include "head.h"
xxx.h:      头文件、函数声明、结构体、宏定义、全局变量、重定义、共用体、枚举、条件编译
源文件:包含main函数的xxx.c,包含子函数的xxx.c

定义
库:就是把一些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员 使用;本质上来说库是一种可执行代码的二进制形式
分类
静态库和动态库,本质区别是代码被载入时刻不同
1、静态库在程序编译时会被连接到目标代码中。
优点:程序运行时将不再需要该静态库;运行时无需加载库,运行速度更快。
缺点:静态库中的代码复制到了程序中,因此体积较大;静态库升级后,程序需要重新编译链接
2、动态库是在程序运行时才被载入代码中。优点:程序在执行时加载动态库,代码体积小;程序升级更简单;不同应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。
缺点:运行时还需要动态库的存在,移植性较差


【库的制作
静态库的制作
1、将源文件编译生成目标文件
        eg:gcc -c fun.c -o fun.o
2、创建静态库用ar命令,它将很多.o转换成.a
        eg:ar crs libmyfun.a fun.o
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a

3、测试使用静态库:
        eg:gcc main.c -L. -lmyfun // -L指定库的路径 -l指定库名
4、执行./a.out

动态库的制作
1、我们用gcc来创建共享库
        gcc -fPIC  -c fun.c  -o fun.o
        -fPIC 创建与地址无关的编译程序
        gcc  -shared  -o  libmyfun.so  fun.o
2、测试动态库使用
        gcc main.c  -L. -lmyfun

        可以正常编译通过,但是运行时报错./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
        刷新:sudo ldconfig

        添加动态库存在的路径,如:/home/hq/work/teach/23031/day3/share

总结
静态库:编译时刻载入,升级麻烦,体积大
              需要重新编译生成可执行文件

动态库:运行时刻载入,升级简单,体积小
              不需要重新编译生成可执行文件


【进程】
1、概念
程序:编写好的可执行文件
进程:独立的可调度的任务
        执行一个程序所分配的资源的总称。
        进程是程序的一次执行过程。
        进程是动态的,包括创建、调度、执行、和消亡

2、特点
1.  系统会为每个进程分配0-4G的虚拟空间,0-3G是用户空间,每个进程所独有,3-4G是内核空间,所有进程共享。
2.  cpu调度进程时,会为每个进程分配
时间片(几毫秒-十几毫秒),当时间片用完,cpu再进行其他进程的调度,实现进程的轮转,从来实现多任务操作。
3、进程段
Linux中的进程包含三个段:
“数据段”:存放的是全局变量、常数以及动态数据分配的数据空间(如malloc函数取得的空间)等。
“正文段”:存放的是程序中的代码
“堆栈段”:存放的是函数的返回地址、函数的参数以及程序中的局部变量

4、进程分类
1.  交互进程:该类进程是由shell控制和运行的。交互进程既可以在前台运行,也可以在后台运行。该类进程经常与用户进行交互,需要等待用户的输入,当接收到用户的输入后,该类进程会立刻响应,典型的交互式进程有:shell命令进程、文本编辑器等。
2.  批处理进程:该类进程不属于某个终端,它被提交到一个队列中以便顺序执行。
3.  守护进程:该类进程在后台运行。它一般在Linux启动时开始执行,系统关闭时才结束。

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)僵尸态(TASK_ZOMBIE):当进程已经终止运行,但还占用系统资源,要避免僵尸态的产生

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

7、函数接口
1、创建fork
2、回收资源wait waitpid
3、结束进程exit _exit
4、获取进程号getpid getppid

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值