Linux基础IO(文件)

文章详细阐述了Linux系统中关于文件操作的基本概念,包括stdin,stdout,stderr的使用,以及open,close,read,write等系统接口的功能。讨论了文件描述符在进程中的作用,文件的读写模式,如w和a模式,并解释了重定向的工作原理。同时,文章还介绍了文件系统结构,如inode和目录的数据块映射,以及文件的创建、删除过程。
摘要由CSDN通过智能技术生成

目录

1、stdin & stdout & strerror

 常见linux系统接口

open

close

 read

write

 fd文件描述符,数组下标

重定向函数

重定向和程序替换不相干

文件系统


 简单理解文件

1、文件宏观理解:文件是在磁盘上存储的,对文件的操作,本质是对外设的输入输出

2、文件 = 属性 + 内容,空文件也占用空间,源于属性占用磁盘空间

3、文件的读写操作是由进程来完成的,上层调用的C语言接口是系统函数封装的

C语言简单函数

w方式写:写入,每次写入都是重新写入,之前的文件内容会被清空

a方式写:append,追加写,本质也是写入,不清空原始文件,在文件的最后写入

这里不加./也可以运行,源于进程cwd指明当前路径

1、stdin & stdout & strerror

Linux系统下一切皆文件,

 常见的C语言函数

为什么所有语言都要提供默认的标准输入、标准输出、标准错误呢,语言都需要交互,不打开这些文件接口,无法交互

 

 2、站在系统角度理解文件

1、文件和进程的关系

2、系统调用

 常见linux系统接口

open

flags有以下几种,mode是文件权限,比如664等

 

 fd,返回成功大于0,失败-1

close

 read

 返回读取的字节数

write

 

 成功返回写的字节数,失败返回-1

 fd文件描述符,数组下标

使用read,read是那个进程调用的,通过那个进程找到files_struct,找到fd,拿到struct file,执行对应read

 

 没有从定向原因,标准错误的fd是2,>符号改的是1里面的,所有没成功

写时拷贝

 

重定向函数

 

>,对应于dup2(fd,1),<<只是相当于多一个append追加形式重定向

 

 <,对应于dup2(fd,0)

重定向和程序替换不相干

 

文件系统

 

文件分为打开的文件,类似于进程打开的,文件被加载到内存上,此外还有普通的未被打开的文件

未被打开的文件位于磁盘上面,文件系统既要管理打开的文件也要管理未被打开的文件。

磁盘的一个扇区大小为512字节,通常内存单位为4kb,所以通过OS完成IO需要以8个扇区也就是521字节为单位进行交互。

 

1、 目录分为普通文件和目录文件,一个文件一个inode

2、inode里面包含了文件的属性集合,里面还有一个block数组,数组里面对应着使用了那些数据块

3、系统里面通过inode标识文件

如何找到一个文件?打开它读取数据?

文件的inode和文件名的映射关系存在于目录的数据块中,所以只要找到目录的inode就行了,如何查找目录的inode,系统依次往上查找,找到根目录,最终找到该目录的inode号,并保存起来,所以这样依次查找最终找到了文件的inode,通过inode拿到文件的数据块,最终找到文件的数据

硬盘中如何创建一个文件,过程是啥?

先找到分区和块组,给这个文件分配inode,在inode位图里面找一个没有被使用的,将文件的属性写入inode,再在块位图里面找一个没有被使用的,将文件数据写入到datablock中,再将块位图找到的那个位置写入到文件的inode中的映射关系中

为什么大多数OS同一个目录中,不允许存在同名文件?

因为目录的数据块存储的是文件名到inode id的映射,如果文件名相同就会出现二义性,不知道找到是哪个映射关系

如何删除文件?

只要将inode和对应的数据块位图删除即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值