Linux6.0、IO基础前置储备知识

个人主页:Lei宝啊 

愿所有美好如期而遇


1、假如我们创建了一个文件,但是没有写入任何内容,那么这个文件占据磁盘空间吗?

--> 答案是占据磁盘空间的,文件 = 文件内容 + 文件属性

2、我们对文件的操作也就是两种,一是对文件内容的操作,二是对文件属性的操作

--> 文件内容我们都知道也就不多提,而文件的属性也就是权限,所属组,文件大小等等,我们可以对他做出修改,详情请参考:Linux权限理解

3、我们访问文件,本质是谁去访问文件呢?

首先,文件是在磁盘上存储,我们写代码去访问,代码经过编译,链接后成为可执行程序,可执行程序运行,在内存中创建PCB后加载进内存变成进程,所以,我们访问文件本质是进程在访问,而不是我们的exe文件。

那么,我们要想向文件做写入,而文件是存在磁盘上的,也就是说我们要向磁盘做写入,磁盘是硬件,只有操作系统有权限向磁盘做写入,而我们作为普通用户,也想向文件做写入怎么办呢?所以操作系统为普通用户提供了文件类的系统接口,我们可以通过这些接口向文件做写入。

那么我用C语言向文件做写入的时候为什么没听过什么系统接口呢?我直接使用C语言标准库提供的fopen等等不是能够很好的访问文件吗?

首先,因为系统接口使用起来确实有难度,在学C语言期间介绍使用系统接口,那么还得了解系统和权限,了解其他周边知识,成本比较高,所以直接使用C标准库提供的函数,一是简单,成本低,二是可以跨平台。

那么为什么说可以跨平台呢?不同平台提供的系统接口是不同的,Linux下我们如果使用系统接口,那么这份代码除了Linux平台可以跑,其他平台都用不了,那么为什么使用标准库提供的接口就可以跨平台了呢?这是因为C标准库把各个平台的系统接口全作了封装,他把各个平台的代码都实现了一遍,然后通过条件编译,动态裁剪,所以我们不用在乎是哪个平台,也就实现了可移植和跨平台性。

再一个,我们现在又为什么要学习系统接口呢?现在几乎所有的语言都对不同平台的系统接口作了封装,在Linux下,java,C++,C等语言都对Linux系统接口作了封装,但是呢,他们封装的接口都是同一套接口,因为都是在Linux下,而Linux操作系统只有一套,也就是说,我们学习了Linux的系统接口,所有语言在Linux下的底层我们都能够看的懂。

4、显示器是硬件吗?

printf向显示器打印,我们使用起来似乎顺利成章,感觉很正常,但是你说向磁盘文件作写入,老是感觉很别扭,这是因为我们向显示器打印,我们可以看得到,而向磁盘文件写入,我们不能立即看到结果,所以就会感到别扭。

但是printf向显示器作写入和向磁盘文件作写入是没有本质区别的,都是向文件写入,因为在Linux下,一切皆文件!

5、Linux下,一切皆文件!

站在我们曾经程序的角度上,我们理解的文件就是读和写,read和write,我们的显示器,也就是printf和cout,我们的键盘,也就是scanf和cin。

当我们的程序加载进内存,使用键盘读取(read)数据进内存,内存就会将这些数据给我们的代码一份,同时给显示器一份,键盘的读取也就是input操作,而内存的操作就是output,这也解释了我们的stdio.h头文件,std是standard的简写,也就是标准,io也就是输入输出。

那么站在系统的角度上,什么叫做文件呢?站在系统的角度上,能够被读取和输出的设备就叫做文件!狭义上的文件,也就是我们的磁盘文件,而广义上的文件,包括磁盘,网卡,键盘,显示器,显卡,几乎所有外设,都可以称之为文件。

可以向键盘写入吗?或者说从显示器读取数据?不可以,他们这两个方法都被设置为了NULL。

相关推荐

  1. Linux6.0、IO基础储备知识

    2023-12-21 19:22:04       47 阅读
  2. 知识:字符集

    2023-12-21 19:22:04       28 阅读
  3. React-Native项目 — 关于IOS知识储备

    2023-12-21 19:22:04       39 阅读
  4. 【MySQL】(基础篇一)—— SQL介绍和知识

    2023-12-21 19:22:04       6 阅读
  5. pwn基础

    2023-12-21 19:22:04       37 阅读
  6. HTML基础

    2023-12-21 19:22:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-21 19:22:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-21 19:22:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-21 19:22:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-21 19:22:04       20 阅读

热门阅读

  1. 【宜搭】低代码开发师中级证书选择题库

    2023-12-21 19:22:04       37 阅读
  2. 前端全栈基础之CSS中margin,padding

    2023-12-21 19:22:04       37 阅读
  3. <sa8650>sa8650 qcxser-之-串行解串器ERRB的map

    2023-12-21 19:22:04       36 阅读
  4. C语言 字符串处理相关函数大汇总之(11~15)

    2023-12-21 19:22:04       34 阅读
  5. leetcode 68. 文本左右对齐

    2023-12-21 19:22:04       47 阅读
  6. synchronized修饰方法和代码块底层实现有什么区别

    2023-12-21 19:22:04       42 阅读
  7. C++ & Swig & Python实现不同应用间VTK对象的传递

    2023-12-21 19:22:04       48 阅读
  8. 【安全】使用auparse解析auditd审计日志

    2023-12-21 19:22:04       39 阅读