区分共享文件的两种形式

这篇博客探讨了共享文件的两种形式:通过open打开相同文件和父子进程间共享。前者不共享文件位置偏移,后者则共享。通过举例说明了这两种情况,并介绍了文件重定向中的共享形式,如dup2函数的应用。
摘要由CSDN通过智能技术生成

一、引言

共享文件至的是,两个不同的文件描述符,但是引用的是同一个文件,就叫做文件在文件描述符fd1和fd2之间共享;
操作系统中主要是三种数据结构表示文件;
1) 文件描述符表,每个进程都有自己的文件描述符表;
2) 内核中的文件表, 文件表中有文件偏移位置, 指向v节点表的指针;
3) 内核中的v节点表, v节点表有大部分文件的信息;

二、共享文件的两种表现形式

1) 通过open打开两个相同的文件
两个文件描述符指向不同的文件表,这种形式虽然共享文件,但是不共享文件位置偏移;对不同的文件描述符进行操作可以从同一个文件中的不同位置读取数据;
在这里插入图片描述
2) 父子进程之间共享同一个文件
父进程创建子进程的时候, 子进程得到父进程的文件描述符。由于文件表存在于内核中, 子进程肯定复制不了文件表的副本;此时父子进程的文件描述符指向同一个文件表表项。这种形式, 父子进程不仅仅共享文件,还共享文件位置偏移;

在这里插入图片描述

三、举例说明

  1. 两个文件描述符不共享爱你个文件位置偏移:
int main()
{
   
	int fd1, fd2;
	char c;
	//foobar.txt的内容是“foobar"
	fd1 = open("foobar.txt", O_RDONLY, 0);
	fd2 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值