Chinaunix首页 | 论坛 | 博客
  • 博客访问: 329142
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-12-19 10:14:36

UNIX系统支持在不同进程间共享打开的文件。
内核使用三种数据结构表示打开的文件:
1.进程表记录项中的包含有一张打开文件描述符表,每个文件描述符表包括:
    a)文件描述符标志(close_on_exec)
      文件描述符标志是一个进程所有文件描述符的位图标志,每个比特位代表一个打开的文件描述符,用于确定在调用系统调用execve()时需要关闭的文件句柄。
    b)指向一个文件表项的指针
2)内核为每个打开的文件维持一张文件表,每个文件表项包含:
    a)文件状态标志(读、写、添写、同步和非阻塞等)
    b)当前文件偏移量
    c)指向该文件v节点表项的指针
3)每个打开的文件都有一个v节点结构。v节点包含了文件类型和对此文件进行各种操作的函数的指针。对于绝大多数文件,v节点还包含了该文件的i节点。这些信息是在打开文件时从磁盘上读入内存的,所以所有关于文件的信息都是快速可供使用的。例如:i节点包含了文件的所有者、文件长度、文件所在的设备、指向文件实际数据块在磁盘上所在位置的指针等等。

如果两个独立的进程各自打开同一个文件,假设第一个进程在文件描述符3上打开该文件,另一个进程在文件描述符4上打开该文件。打开该文件的每个进程都得到一个文件表项,因为每个进程都有它自己的对该文件的当前偏移量。而对于一个给定的文件,只有一个v节点表项。

dup返回的新文件描述符一定是当前可用的最小文件描述符值

阅读(1050) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~