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在内核中作用已打开文件的三种数据结构的哪一个对象?


答案


原创粉丝点击