1、FILE文件指针
a>.指向进程用户区中的 FILE 结构的数据结构;
b>.FILE 结构包括:I/O缓冲区、文件描述符(文件描述表的一个索引);
c>.FILE 结构中含有文件描述符,可以使用 fopen 来获得文件指针,然后从文件指针获取文件描述符(文件描述符唯一,而文件指针不唯一,但指向的对象唯一);
d>.FILE 结构函数可以看作是队 fd 直接操作的系统调用的封装,它的优点是带有I/O缓存,比 fd 具有跨平台性。
2、inode,软链接,硬链接
inode:记录档案属性;指针(指向文件内容放置的数据块的位置)。
一个 inode 通常为128字节,包括以下文件属性信息:
a.文件的拥有者和所属用户组;
b.文件的访问权限设定;
c.文件的类型;
d.文件的访问、修改等时间;
e.文件的大小;
f.文件的各种标志,如 SUID 和 SGID 等;
g.指向文件内容数据块的指针。
硬链接(Hard link):在某个目录下新增一个档案的关联数据。
软链接(符号链接):只是源文件的一个标志。
软硬链接的区别:
1>.使用硬链接时,磁盘的空间与 inode 的数目都不会改变(硬链接的数目会发生变化),hard link 只是在某个目录下多写入一个关联数据,所以不会用掉 inode 与磁盘空间;
软链接,有自己的 inode ,并在磁盘上有一小片空间存放路径名。
2>.硬链接不管有多少个,都指向的是同一个 i 节点,只是会把节点链接数增加,只要节点链接数不是0,文件都存在,当修改源文件或者链接文件任何一个的时候,其它的文件都会同步修改,如果删除互为硬链接关系的某个文件时,其它的文件并不受影响;
软链接不直接使用 i 节点作为文件指针,而是使用文件路径名作为指针。当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但我们却不能查看软链接的内容了。
3>.硬链接不可以跨文件系统,不可以对一个不存在的文件名链接,不可以对目录链接;
软连接可以。
3、fork 和 vfork 的区别
1>.fork 的子进程是父进程的副本,将获得父进程的数据空间、堆、栈等资源的副本,父子进程有一个想要修改数据/栈时,两个进程真正分裂(写时拷贝);
vfork 不会复制页表,在子进程调用 exec/exit 之前,在父进程的地址空间运行(父进程阻塞),也就是数据共享,可能会破坏父进程的数据结构/栈,导致失败。
2>.fork 父子进程执行的次序不确定;
vfork 保证子进程先运行,子进程调用 exec/exit 时,父进程才运行。
3>.vfork 可能会发生死锁,如果子进程依赖于父进程的动作。