基础IO、理解文件底层操作(文件标识符、重定向、缓冲区)

文件标识符、重定向、缓冲区

想要深入理解文件相关操作,就必须从底层操作系统上有一个深入的理解!!!

从语言层面来说:C语言会默认打开三个输入输出流 stdin stdout stderr 标准输入-键盘 标准输出-显示器 标准错误-显示器   这两个显示器的区别是什么呢?? 标准输出可以重定向的到文件,标准错误不能重定向到文件    同样的C++会打开 cin , cout , cerr

那么这三个标准流指的是什么呢?

可以看出三个的文件类型都是FILE*类型的结构,那么这个FILE从本质上又是什么呢?答案是结构体,具体又是怎么说呢,我们等会在解释这个概念。

在引出一条新的老话,一切皆文件,向文件中或者是硬件设备中写入,其实都是指的向文件中写入,最终访问的都是硬件:显示器、键盘、文件(就是存在于磁盘之中的)。那么在操作系统上又是怎么完成这个操作流程呢?看下图

 那么文件操作系统提供的接口又是什么样

 

操作系统上接口提供的open函数就是上面的,其中语言层面的就是将这些接口进行封装调用实现。

接下来我们关心一些返回值int类型,打开文件的返回值是int类型???惊了这不是

此时这个东西呗赋予了一个新的名词, 文件描述符fd 在创建了几个文件之后,发现他们的返回值是3,4,5,6??这又是什么意思呢?? 连续但是0 1 2 呢??stdin、stdout、stderr???这个意思?

为了解决这个文件描述符问题,我们在看下面的这个流程图

 六字真言  先描述,在组织 这个又是怎么操作的呢?

文件描述符的分配规则,就是给新文件分配fd,是从fd_arr[]中找到一个最小的,没有被使用的

解决了文件描述符这个概念,我们在来解释一下一切皆文件

 

在引出一个名词,重定向

输出重定向 - 本质就是将本来应该显示在显示器上的,被显示到文件内部,

是怎么实现这个输出重定向的呢?

 

就是将log.txt中的地址复制到1所对应的地方,就能够完成输出重定向

 可以怎样调用输出重定向呢

使用 dup2系统调用

执行exec*的程序替换时,会不会影响我们曾经打开的文件  不会的

 最后一个问题??缓冲区的问题。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值