Linux—文件 I/O

一、先来了解下什么是文件 I/O标准 I/O

文件I/O文件 I/O 称之为不带缓存的 IO(unbuffered I/O)不带缓存指的是每个 read,write 都调用内核中的一个系统调用。也就是一般所说的低级 I/O——操作系统提供的基本 IO 服务,与 os 绑定,特定于 Linuxunix 平台。

标准I/O标准 I/OANSI C 建立的一个标准 I/O 模型,是一个标准函数包和 stdio.h 头文件中的定义,具有一定的可移植性。标准 I/O 库处理很多细节。例如缓存分配,以优化长度执行 I/O 等。标准的 I/O 提供了三种类型的缓存。
(1)全缓存:当填满标准 I/O 缓存后才进行实际的 I/O 操作。
(2)行缓存:当输入或输出中遇到新行符时,标准 I/O 库执行 I/O 操作。
(3)不带缓存stderr 就是了。( stderrLinux/unix 标准输出(设备)文件,对应终端的屏幕进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。在 C 中,程序执行时,一直处于开启状态。)

二、文件 I/O标准 I/O的区别:

文件 I/O 又称为低级磁盘 I/O,遵循 POSIX 相关标准。任何兼容 POSIX 标准的操作系统上都支持文件 I/O

标准 I/O 被称为高级磁盘 I/O,遵循 ANSI C 相关标准。只要开发环境中有标准 I/O 库,标准 I/O 就可以使用

Linux 中使用的是 GLIBC,它是标准 C 库的超集不仅包含 ANSI C 中定义的函数,还包括 POSIX 标准中定义的函数。因此,Linux 下既可以使用标准I/O,也可以使用文件 I/O

通过文件 I/O 读写文件时,每次操作都会执行相关系统调用。这样处理的好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销

标准 I/O 可以看成是在文件 I/O 的基础上封装了缓冲机制。先读写缓冲区,必要时再访问实际文件,从而减少了系统调用的次数

文件 I/O 中用文件描述符表现一个打开的文件可以访问不同类型的文件如普通文件、设备文件和管道文件等。

标准 I/O 中用 FILE(流)表示一个打开的文件,通常只用来访问普通文件

三、C 标准函数与系统函数的区别

带缓冲区的 c 标准函数:
带缓冲区的 c 标准函数

  1. I/O 缓冲区

每一个 FILE 文件流都有一个缓冲区 buffer,默认大小 8192 Byte

  1. 效率

这个要看情况才能决定那个效率高,不同情况,效率是不一样的。

  1. 程序的跨平台性

事实上 Unbuffered I/O 这个名词是有些误导的,虽然 write 系统调用位于 C 标准库 I/O 缓冲区的底层,但在 write 的底层也可以分配一个内核 I/O 缓冲区,所以 write 也不一定是直接写到文件的,也可能写到内核 I/O 缓冲区中,至于究竟写到了文件中还是内核缓冲区中对于进程来说是没有差别的,如果进程 A 和进程 B 打开同一文件,进程 A 写到内核 I/O 缓冲区中的数据从进程 B 也能读到,而 C 标准库的 I/O 缓冲区则不具有这一特性。

四、PCB(进程控制块 Process Control Block)概念

为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个 PCB,在创建进程时,建立 PCB,伴随进程运行的全过程,直到进程撤消而撤消

PCB 进程控制块是进程的静态描述,由 PCB、有关程序段和该程序段对其进行操作的数据结构集三部分组成。
UnixLinux 系统中,进程是由进程控制块,进程执行的程序,进程执行时所用数据,进程运行使用的工作区组成。其中进程控制块是最重要的一部分。

进程控制块是用来描述进程的当前状态,本身特性的数据结构,是进程中组成的最关键部分,其中含有描述进程信息和控制信息,是进程的集中特性反映,是操作系统对进程具体进行识别和控制的依据。PCB 一般包括:

1.程序 ID(PID、进程句柄):它是唯一的,一个进程都必须对应一个 PIDPID 一般是整形数字
2.特征信息:一般分系统进程、用户进程、或者内核进程等
3.进程状态:运行、就绪、阻塞,表示进程现的运行情况
4.优先级:表示获得CPU控制权的优先级大小
5.通信信息:进程之间的通信关系的反映,由于操作系统会提供通信信道
6.现场保护区:保护阻塞的进程用
7.资源需求、分配控制信息
8.进程实体信息,指明程序路径和名称,进程数据在物理内存还是在交换分区(分页)中
9.其他信息:工作单位,工作区,文件信息等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值