文件操作:
欢迎加入QQ:498903810 一起交流、讨论知识,里面有大佬,也有小白,天下码农一家亲,大家一起讨论进步。
1、静态文件(Inode)
硬盘中的文件,就是静态文件。每一个文件都是以多个块和多个扇区组成的,一般情况,一个扇区(512字节),64个扇区组成一个块。
在硬盘中,对文件管理有一个特定的规则(文件管理表 + 真实的内容):文件管理表,这个表中是以文件为单位,提供了各个文件的
所有信息(每一个文件信息表就对应一个结构体,这个结构体称之为inode,也叫i节点,这个文件的包含的多少个块、多少扇区),、
而我们通过查找这个表就可以找到我们所需要文件内容。
我们找文件,通过(文件名字)找的。
第一步:在文件管理表中,中找到这个文件的名字
第二步:访问这个文件。
U盘/硬盘格式化:
1、快速格式化:清除了你的文件管理表,文件系统找不到你所 需要的文件名字。你的真实文件还在硬盘里,可以部分恢复。
2、彻底格式化:把文件真实内容也清除掉了,你的U盘不能软件 技术恢复。必须借助国家安全机构(通过物理机制,通过硬件的记忆)。
联系:生活中,处理小文件的一个手段,文件压缩.把扇区的空余字节都利用起来,减少了占用硬盘上的空间。硬盘喜欢大文件。
2、动态文件 (Vnode)—>在内存中
一个程序的运行就是一个进程。而我们打开的文件就属于这个进程,而操作系统对于每一个进程都有一个结构体进行管理,这个管理当前进程所有
信息的结构体,我们就叫作(进程信息表)。这个表中有一个指针指向我们
的文件管理表,这个文件管理表就包含了本进程打开的所有文件,通过查找文件管理表的index(文件描述符fd,相当于这个结构体数组的下标),
就得到了我们的文件所有信息的结构体(Vnode),而这个结构体的指针就是文件指针。
stat text.c 查看text.c文件的信息
IO:写入文件的缓冲区,减少了文件写入的频率,一般为4K大小
2.1文件属性
最近更改:2018-01-25 10:51:17.543987887 +0800
最近改动:2018-01-25 10:51:17.543987887 +0800
最近更改指的是:文件的内容发生改变的时间。
最近改动指的是:文件的权限发生改变的时间。
3、文件与流
系统级别的文件操作函数:文件IO;标准库提供的操作文件函数:标准IO。区别在于:可移植性。文件IO可以完成对文件的所有操作,但是效率不高,
所以出现了使用标准IO;但是我们必须知道,标准IO最终也是通过文件IO实现的。
流:字符流的意思。读写文件的时候,是一个一个字符操作的连续进行。文件内容中是不分,行的仅仅连在一起的。
fwirte写进去的是数字,但是文件里没有数字,文件里放的是ASCII编码
fopen可以指定打开文件的格式
文件复制:1、连续打开同一个文件(inode)
2、C语言里有两个API(dup, dup2)
#include <unistd.h>
int dup(int oldfd);//函数分配文件描述符
int dup2(int oldfd, int newfd);//自己指定文件描述符
用dup()创建的文件描述符,和旧的文件描述符号,各自操
作自己的那份文件,但是两者的读写操作互相影响文件指
针,相当于多次open加了O_APPEND标志。
文件描述符:
0:标准输入
1:标准输出
2:标准错误
3、多个进程打开同一个文件