Linux进程的共享文件
来源:互联网 发布:linux安装windows软件 编辑:程序博客网 时间:2024/04/30 04:06
一、内核中打开文件共享机制分析
当我们运行一个进程的时候, 我们需要打开一个其他的文件进行IO操作, 但是那么问题就来了, 这个文件在一个进程中是以什么样的形式来表达么??
目前根据我了解到 , 有两种表达形式。
1、 第一个是文件指针的形式,。
2、第二种是文件描述符的形式。
以下我们将会重点讨论文件描述符号:
当我们运行某个进程的时候时候, 内核将会使用三种数据结构表示打开文件, 他们之间的关系可以决定一个文件在文件共享机制中的同步异步关系?
1)、进程表项---结构
a、文件描述符标志
b、文件表项指针
2)、文件表项结构
a、文件状态标志(读、写、填写、同步异步和非堵塞等操作)
b、当前文件偏移量
c、v节点指针
3)、v节点表项
a、v节点信息
b、v_data
以下是进程中打开文件在内核中的数据结构抽象数据图:
二、dup和dup2函数
int dup(int fd);int dup2(int fd, int fd2); //若成功则返回新的文件描述符, 若出错则返回-1
1、dup函数
dup函数是在当前可用的文件描述符中找出最小值的。
2、dup2函数
dup2函数是把fd2的文件描述符指向与fd文件描述符号表示的相同的文件。但若是fd2 = fd, 那么直接返回, 将没有任何变化。 但是若是fd2是已经打开的文件描述符好则将会先关闭fd2文件描述符号, 在指向fd文件描述符表示的文件。
dup(fd) 等效于: fcntl(fd, F_DUPFL, 0);dup2(fd, fd2) 等效于close (fd2);fcntl(fd, F_DUPFL, fd2);
例如:
fd1 = open(path, oflags);fd2 = dup(fd1); fd3 =open(path, oflags);分析fd1,fd2,fd3的打开文件在内核中的数据结构图?(答案见改文章结尾)
F_SETFD 和F_SETFL 对文件描述符号的影响?
F_SETFD 主要是影响进程表项的文件描述符号标志
F_SETFL 主要是影响文件表项的文件状态标志
三、总结
1、了解打开文件在内核中的三种数据结构和共享机制。
2、熟练了解dup和dup2的原理
3、了解F_SETFD 和F_SETFL在内核中作用已打开文件的三种数据结构的哪一个对象?
答案
阅读全文
0 0
- Linux进程的共享文件
- Linux文件共享(四)——父进程与子进程之间的文件共享
- Linux文件共享(四)——父进程与子进程之间的文件共享
- Linux文件共享(四)——父进程与子进程之间的文件共享
- Linux进程实践(2) --僵尸进程与文件共享
- Linux进程实践(2) --僵尸进程与文件共享
- Linux进程实践(2) --僵尸进程与文件共享
- Linux进程实践(2) --僵尸进程与文件共享
- linux多进程下的文件共享(包括每个进程的文件表项的详细介绍)
- 父子进程共享文件表的
- 多进程写文件的共享问题:
- linux进程间的通信--共享内存
- linux进程间的通信--共享内存
- linux进程间的通信: 共享内存
- Linux进程间的通信--内存共享
- Linux中fork的使用(05)---父子进程共享文件描述符
- linux下的文件共享
- linux的nfs文件共享
- 如果处理服务器与客户端时间不一致的问题
- node+express 后端api
- eclipse linux 下自动提示快捷键
- 分布式数据库, 高级形态 分布式事务数据库
- Hibernate 一级缓存,二级缓存,查询缓存
- Linux进程的共享文件
- 倒计时工具类:PYContDownManager
- android 内存监测工具 DDMS 和mat 工具使用
- include指令和动作的区别
- 3Sum Closest--LeetCode
- 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架(这个666)
- 初识Runtime之KVO实现原理
- 产品级框架封装-单例模版
- Java 生成随机中文、英文姓名(上)