初步了解文件IO

1 文件IO_读写函数

在Linux系统中,一切都是"文件":普通文件,确定程序,网络通信等,所有的操作,都是通过”文件IO“来操作的,所有必要掌握文件操作的常用接口。

1.1 文件从哪里来?

Linux 的文件既可以是真实保存到存储介质的文件也可以 是自身内核提供的虚拟文件,还可以是设备节点。

2.2 如何访问文件?

利用通用的IO模型:open / read / write / lseek / close

如何知道这些函数的用法?

Linux中有3大帮助方法:help , man , info

help只能用于查看某个命令的用法。而man手册既可以查看命令用法,也可以查看函数用法。info手册比man手册更全面,但man使用起来更容易。

当想查看open函数用法,执行

man 2 open

注:man手册中快捷键:f往前翻,b向后翻,q退出。

2 文件IO_内核接口

APP(应用程序)        ——> open/read/write....——>        kernel(内核)

2.1 应用程序如何进入内核?

APP使用的open,read,write这些函数是由/glibc等c库提供的。这些文件要求打开文件,要去读写文件,它需要依赖操作系统提供的功能。

可以认为该APP是一个APP1,操作系统是另外一个APP2,APP1不能调用APP2中函数,那么open是如何使用内核里面的功能呢?

原因:open函数中会放一条指令,当执行该指令(swi或svc,swi用于32位,svc用于64位)后,会触发cpu的异常,会导致cpu跳到某个地址去执行操作系统的代码,此时,操作系统可去执行对应的sys_open和sys_read,sys_write。

2.2应用程序如何知道触发异常是为了调用sys_open而不是sys_read?

/glibc实现open/read/write这些系统调用时,它会使用这些命令来触发异常,它会在触发异常时,传入不同的参数给内核,内核根据那些不同的参数可分辨。

2.3/glibc如何传递参数?

可以利用old ABI 或 EABI 或 ARM64。具体不详述。

注:内核中:sys_call_table是函数指针数组 。

内核把glibc传入的值取出来后,就可用这个值作为sys_call_table数组的下标,在数组中找到对应函数,如何调用调用函数。

2.4内核的 sys_open、sys_read 会做什么?

进入内核后,sys_read/open 会首先根据参数判断文 件的类型,然后根据不同的文件类型去找不同的设备驱动,继而进行读写或者输入输出控制。

普通文件以某种格式保存在块设备上后,需要使用FAT32或EXT4....文件系统的代码来读写块设备。

字符设备节点以主设备号来寻找驱动,使用驱动来操作这些硬件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值