【Linux】文件IO整理

文件描述符与文件流指针的关系

文件描述符
文件描述符是由内核中的进程产生的,进程控制块(PCB)中存放了files_struct结构体,该结构体中存放了若干个文件描述符的结构体数组fd_array,数组中的每一个元素都是一个file结构体用来保存文件的大小、创建时间、所有者、所属组等信息,通过该文件描述服能够找到对应的 *.*文件。

文件流指针
文件流指针是用来封装文件描述符的,文件流指针的底层是通过IO_FILE这个结构体来实现的,其中存放了读写缓冲区以及与文件描述符相关的_fileno,通过该_fileno能够找到fd_array数组中对应下标的文件描述符。我们通常使用的库函数fopen,fwrite等创建的句柄就是文件流指针。

总结
文件描述符直接与操作系统内核打交道,文件流指针就是库函数,二者位上下级的调用关系。
在这里插入图片描述

静态库与动态库

动态库
生成:

  • -shared:产生动态库必须的命令参数
  • -fPIC:产生位置无关码
  • eg:gcc -shared -fPIC test.c -o libtest.so

使用:

  • -L:确定链接动态库的存放路径
  • -l:确定链接动态库的名称
  • LD_LIBRARY_PATH:搜索动态库的环境变量
  • eg:gcc main.c -o main -L [path] -ltest

静态库
生成:

  • ar -rc lib[filename].a

使用:
在编译程序的时候链接静态库
gcc [源码文件] -o [生成的可执行程序] -L [path] -l [静态库的名称]

文件存储与读取

在这里插入图片描述
当数据向Date Bolcks中存储的时候,通过位图BlockBitMap来查找空闲块存储数据。为了方便读取块中的数据,在存储数据的同时,还需要通过inodeBitMap在iNodeTable中查找空闲的inode节点,inode节点中存放了文件存储的快信息,方便后续的读取。
最终我们将文件名与其相对应的inde节点信息当做目录统一存储

软链接与硬链接

软链接
具有自己的inode节点,inode节点中保存的是链接源文件的信息

ln -s [源文件] [对应的软链接文件]

//通过ls -i 可以查看文件的inode节点
//软连接与源文件的inode不同

硬链接
没有自己的inode节点,inode节点是源文件的inode节点

ln [源文件] [对应的硬链接文件]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值