一、lseek函数
- 获取文件大小示例👇
- 扩展文件大小示例,但是如果要真改变文件大小必须有I/O读写操作
- 无I/O示例的扩展👇
结果:原来大小是777,扩展111,lseek是888,但是文件大小还是777
- 加上I/O操作,即加个write
最重要的是,文件读写使用的是同一偏移位置,因此在文件读写的时候需要用lseek改变一下文件读写位置
如果注释lseek那行如上述代码所示,运行代码是没有内容的,因为write写到了最后,read是从write结束处开始的,因此往后是读不出东西的
二、传入传出参数
三、文件系统、文件存储的一些概念
首先了解如下文件存储相关概念:inode、dentry、数据存储、文件系统
- inode
其本质为结构体,存储文件的属性信息,如权限、类型、大小、时间、用户、盘块位置……也叫做文件属性管理结构,大多数的inode都存储在磁盘上
少量使用、近期使用的inode会被缓存到内存中 - dentry
目录项,其本质依然是结构体,重要成员变量有两个{文件名,inode},文件内的内容保存在磁盘块上
创建硬链接就是同一个inode号,当硬连接数为0即没有指向的时候磁盘就可以被覆盖
四、stat函数、lstat函数
1,stat函数:获取文件属性(从inode结构体中获取)
获取文件长度👇 注意第二个参数strut stat的头文件
使用st_mode可以查看文件类型
例子👇
但是关于最后一个判断符号链接,stat是会穿透符号链接的,意思是判断的就是“本尊”的类型,要想不穿透符号链接,就要用lstat函数
2,lstat函数
参数返回都是一样的,就是对符号链接的判断有区别:👇
Linux对一些复杂的函数是有demo的,可以去看
五、link函数,unlink函数、隐式回收
- link函数:为已经存在的文件创建目录项
可以用link函数和unlink函数实现mv函数,即改文件名字,先创建一个再删除原来的就ok√
- unlink函数:删除一个文件的目录项
⭐⭐这种思想要记一下⭐⭐
- 隐式回收
当进程结束运行时,所有该进程打开的文件会被关闭,申请的内存空间会被释放。系统的这一特性称之为隐式回收系统资源,但是写程序中不要依赖这个特性,因为这是操作系统的特性,但是我们跑程序的时候基本上是在服务器上,服务器一般是24h开着的,这就意味着操作系统没有这个机会来给你回收
六、文件目录rwx权限差异、目录操作函数
当ls -l 文件名
时第一个出现的数字表示的大小是文件目录创建时路径的大小,我们也可以用readlink 目录文件
来进行查看目录创建路径
文件、目录权限
目录操作函数:
是隐藏了一个文件的,可以加个判断==