一、引言
共享文件至的是,两个不同的文件描述符,但是引用的是同一个文件,就叫做文件在文件描述符fd1和fd2之间共享;
操作系统中主要是三种数据结构表示文件;
1) 文件描述符表,每个进程都有自己的文件描述符表;
2) 内核中的文件表, 文件表中有文件偏移位置, 指向v节点表的指针;
3) 内核中的v节点表, v节点表有大部分文件的信息;
二、共享文件的两种表现形式
1) 通过open打开两个相同的文件
两个文件描述符指向不同的文件表,这种形式虽然共享文件,但是不共享文件位置偏移;对不同的文件描述符进行操作可以从同一个文件中的不同位置读取数据;
2) 父子进程之间共享同一个文件
父进程创建子进程的时候, 子进程得到父进程的文件描述符。由于文件表存在于内核中, 子进程肯定复制不了文件表的副本;此时父子进程的文件描述符指向同一个文件表表项。这种形式, 父子进程不仅仅共享文件,还共享文件位置偏移;
三、举例说明
- 两个文件描述符不共享爱你个文件位置偏移:
int main()
{
int fd1, fd2;
char c;
//foobar.txt的内容是“foobar"
fd1 = open("foobar.txt", O_RDONLY, 0);
fd2