linux文件IO(3)

1.共享文件

当同一进程多次打开同一文件时,会创建多个fd,每个fd将指向一个文件表结构体,文件表结构体中有文件指针,和指向vnode的指针,打开同一文件,所以vnode是一样的,关键是文件指针是不同的。

2.实现共享文件

(1)同一进程创建多个文件表,且都指向一个vnode,这时fd不同。

(2)不同进程创建文件表,指向同一个vnode,这时fd可能一样。

(3)使用dup,创建不同fd,指向同一个文件指针,那么指向的vnode就是一样的。

3.同一进程不同文件表的共享文件下,对文件进行操作

(1)不使用O_APPEND:由于文件表是不同的,所以文件指针不同,所以是独立操作的。

(2)使用O_APPEND:这时文件指针产生了关联,是一起操作的,好像两个文件表共用一个文件指针。

4.fd是什么?
(1)进程表中有一个文件描述符表,文件描述符表就是一个数组,而文件描述符就是他的index,数组元素的内容就是文件表指针,指向文件表,文件表中有文件指针,vnode指针。
(2)文件描述符是从0开始的,将最小空文件描述符分配。
(3)进程是默认打开三个文件:stdin,stdout,stderror,所以文件描述符0,1,2是被占用的。

5.dup
(1)dup的作用
dup可以用来给文件表重新分配文件描述符,比如分配1,这时由于OS是将1当作标准输出,所以这时,就实现了标准输出的重定位。
(2)dup的缺点
无法指定分配的文件描述符,只能由OS自动分配。
(3)改进dup2
可以自己指定文件描述符。
(4)扩展——shell中标准输出重定位

使用 '>'



linux文件IO(3)

linux文件IO(3)


linux文件IO(3)