FILE、inode、fork和vfork

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 可能会发生死锁,如果子进程依赖于父进程的动作。

时间: 2024-10-05 04:43:24

FILE、inode、fork和vfork的相关文章

inode 、软(硬)链接及fork与vfork

一.inode.软/硬链接 (一).1.inode 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区".每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候[不会一个个扇区地读取,这样效率太低],而是一次性连续读取多个扇区,即一次性读取一个"块".这种由多个扇区组成的"块",是文件存取的最小单位. 文件数据都储存在"块"中.而文件的创建者.文件的创建日期.文件的大小等等信息需要一个区域进行存储文件信息.这种储存文

UNIX高级环境编程(9)进程控制(Process Control)- fork,vfork,僵尸进程,wait和waitpid

本章包含内容有: 创建新进程 程序执行(program execution) 进程终止(process termination) 进程的各种ID ? 1 进程标识符(Process Identifiers) 每个进程都有一个唯一的标识符,进程ID(process ID). 进程的ID是可重用的,如果一个进程被终止,那么它的进程ID会被系统回收,但是会延迟使用,防止该进程ID标识的新进程被误认为是以前的进程. 三个特殊ID的进程: Process ID 0:调度者进程,内核进程. Process

小程序分析(fork()和vfork())

分析下述程序,i<4时,最终创建了多少个进程. fork()是创建一个子进程. 分析:i=0时,父进程1创建了一个子进程1.(此时共2个进程) i=1时,父进程1继续创建子进程2,将子进程1又当成父进程,创建子进程3.(此时共6个进程) i=2时,将子进程当成父进程继续创建子进程.之前的父进程继续创建子进程.(此时共14个进程) i=3时,将子进程继续当成父进程继续创建子进程.之前的父进程继续创建子进程.(此时共30个进程) 注:可先计算由父进程创建的进程数,最后乘2即为总进程数. 扩展:当i<

Linux中fork,vfork和clone详解(区别与联系)

fork,vfork,clone Unix标准的复制进程的系统调用时fork(即分叉),但是Linux,BSD等操作系统并不止实现这一个,确切的说linux实现了三个,fork,vfork,clone(确切说vfork创造出来的是轻量级进程,也叫线程,是共享资源的进程) 系统调用 描述 fork fork创造的子进程是父进程的完整副本,复制了父亲进程的资源,包括内存的内容task_struct内容 vfork vfork创建的子进程与父进程共享数据段,而且由vfork()创建的子进程将先于父进程

linux 进程创建clone、fork与vfork

目录: 1.clone.fork与vfork介绍 2.fork说明 3.vfork说明 4.clone说明5.fork,vfork,clone的区别 内容: 1.clone.fork与vfork介绍 Linux下的进程与线程相同点是都有进程控制块(PCB,具体的类是task_struct).区别在于一个有独立的进程资源,一个是共享的进程资源.除了内核线程是完全没有用户空间.进程资源包括进程的PCB.线程的系统堆栈.进程的用户空间.进程打开的设备(文件描述符集)等. Linux的用户进程不能直接被

fork和vfork,return和exit的理解

fork和vfork的差别: 1.fork是创建一个子进程,并把父进程的内存数据copy到子进程中. vfork是创建一个子进程,并和父进程的内存数据share一起. 2.vfork是这样的工作的: (1).保证子进程先执行. (2).当子进程调用exit()或exec()后,父进程往下执行. 3.fork后来采用的优化技术,这样,对于fork后并不是马上拷贝内存,而是只有你在需要改变的时候,才会从父进程中拷贝到子进程中,这样fork后立马执行exec的成本就非常小了.而vfork因为共享内存所

Linux之fork与vfork区别

创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork() 1.fork()函数 返回值:成功:父进程:返回子进程的PID 子进程:返回0 失败:父进程返回-1 子进程是父进程的一个拷贝.即子进程从父进程得到数据段和堆.栈段的拷贝,这些需要分配新的内存(不是与父进程共享,而是单独分配内存):而对于只读的代码段,通常使用共享内存的方式访问. fork返回后,子进程和父进程都从调用fork函数的下一条语句开始执行. 由于子进程与父进程的运行是无关的,所以,父进程可先于子进程运行,子进

Samsung_tiny4412(笔记)--&gt;volatile,container_of,file_operations,file,inode

/*********************************************************************************** * * Samsung_tiny4412(笔记)-->volatile,container_of,file_operations,file,inode * * 声明: * 本文的结构体的注释主要是参考网络上的解释,几乎无任何个人理解,主要是为后续 * 代码编辑提供参考. * * 2015-3-8 阴 深圳 尚观 Etc 曾剑锋

fork与vfork的用法与区别

fork和vfork都用于创建进程 fork函数的作用是复制一个进程,当一个进程调用它,完成后就出现两个几乎一模一样的进程,也由此得到一个新的进程,称为子进程.原来的进程称为父进程.子进程是父进程的一个拷贝,即子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存:而对于只读的代码段,通常使用共享内存的方式访问. #include<stdio.h> #include<sys/types.h> #include<stdio.h> int main() {