对于一个打开的文件,UNIX提供了三种数据结构来表示。

1)进程地址空间中的进程表项中的描述符表。其实就是一个数组,每一项就是一个k-v,k是fd,v是该描述符对应的打开文件在内核中的文件表项的地址。

2)文件表项。包括文件状态标志当前文件偏移量、v节点的地址。文件状态标志位提供一些文件操作的选项、文件偏移量提供当前文件在内核中的读写初识位置、v节点地址是指向v节点的指针。

3)v节点和i节点。v节点包含了文件的类型和对于此文件进行操作的各种函数指针集合、i节点指针指向i节点。i节点包括文件的所有者、文件长度、指向文件实际数据块在磁盘上的位置

一般来说,一个进程中的文件描述符对应于一个内核中的文件表项。这是因为每个进程都有各自的对该文件的一个当前偏移量。一个给定的文件,在unix系统中对应于一个v节点表项。

多个文件表项可以对应于同一个v节点表项。但是当多个进程同时对这一个临界区(文件)进行写操作的时候会发生不同步带来的混乱。因此应当保证一个进程对于当前文件的操作是原子的。例如O_APPEND标志就是表示当前进程对于该文件的追加是原子的。

多个文件表项在dup或者fork调用情况下,会使得多个进程表项共同指向同一份文件表项。dup用来复制现有的文件描述符。

UNIX:描述符和文件结构相关推荐

  1. unix文件描述符——socket

    在unix系统中,socket和普通文件一样对待,因为它可以像普通文件一样被读和写,但是它还有一些自己独特的特点,例如,文件的读写位置可以设置,但是socket只能被顺序的读写等等,那么在unix系统 ...

  2. UNIX中文件描述符和文件指针

    文件描述符 在C程序中,文件由文件指针或者文件描述符表示.ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UN ...

  3. UNIX再学习 -- 文件描述符

    在 UNIX/Linux 系统中,一切皆文件,这句话想必都有听过.对于文件的操作几乎适用于所有的设备,这也就看出了文件操作的重要性了.在C语言再学习部分有讲过标准I/O文件操作,参看:C语言再学习 - ...

  4. 深入理解Linux/Unix文件描述符和epoll

    Linux/Unix 文件描述符(File Describer)的本质 Linux/Unix(以下简称Linux)系统中,每个进程都有一个专用的数组,数组的元素是一个结构体,称为文件描述符File D ...

  5. 理解Unix/Linux系统中的文件描述符

    简介 文件描述符是针对Unix/Linux的每个进程而言的,每个进程都维护了一个文件指针表,指针指向操作系统的文件.这里的文件是指的Unix/Linux系统所说的文件,Unix/Linux下一切皆文件 ...

  6. linux unix域socket_从文件描述符到Socket

    回顾 在上一篇[谈谈我对学习Netty的看法]大致描述了学习netty整个知识的储备,今天就从最基础的文件描述符开始. 文件描述符 我们知道在linux系统中一切皆文件,而文件又可分为:普通文件.目录 ...

  7. 存储基础 — 文件描述符 fd 究竟是什么?

    坚持思考,就会很酷 前情概要 通过上篇 Go 存储基础 - 文件 IO 的姿势, 我们看到有两种文件读写的方式,一种是系统调用的方式,操作的对象是一个整数 fd,另一种是 Go 标准库自己封装的标准库 ...

  8. 【操作系统/OS笔记17】文件系统基本概念、文件描述符、文件系统访问、文件别名、文件系统种类

    本次笔记内容: 12.1 文件系统:总体介绍 12.2 基本概念 12.3 基本概念--文件系统和文件 12.4 基本概念--文件系统的功能 12.5 基本概念--文件和块 12.6 基本概念--文件 ...

  9. linux进程文件描述符 vnode,Linux C编程详解:进程原理分析、文件描述符和文件记录表、文件句柄和文件原理...

    一.引言 文件操作是Linux C编程中其中的一项核心技术,实际上也相当重要,这里并不是说狭义上的那种文件操作,它也非常有助于理解和学习Linux系统.为什么这样说呢?因为在Unix/Linux的世界 ...

最新文章

  1. unity开发小贴士之八 Audio使用心得
  2. 如何寻找合适的189邮箱pushmail客户端
  3. 自己动手写一个JQuery插件(第二篇)(转)
  4. 我的BLOG:阅读目录
  5. WebSphere SSLC0008E 无法初始化 SSL 连接。未授权访问被拒绝,或者安全性设置已到期 解决方法...
  6. (转) Unity3D 使用Texturepacker打包工具制作NGUI(Atlas)图集
  7. StringBuilder StringBuffer
  8. 十二、爬了CSDN,我发现了这些
  9. [Asp.net]SignalR实现实时日志监控
  10. 程序员:最绝望的面试代码写了4个小时,就是不运行!最终收到15K的offer
  11. java script 对象
  12. 【整理】C#2.0泛型编程之概述、default()方法、别名指定与泛型约束
  13. batch size自适应log(1)
  14. indesign教程,如何在帧之间流动文本?
  15. 深度剖析ConcurrentHashMap源码
  16. [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换
  17. windbg 分析pchunter导致的蓝屏
  18. 未来五年,保险平权的最大机会来了
  19. 基于docker 部署 canvas-lms
  20. systemd的日志存在哪里?

热门文章

  1. 2017-2-15从0开始前端学习笔记(HTML)-图片-表格-表单
  2. HTML简单的自定义属性制作tab切换
  3. socket绑定指定网卡发包
  4. Semantic UI实现一个landing page
  5. Pygame:编写一个小游戏
  6. macOS下使用anaconda相关系列
  7. 基于机器学习的捡球机器人设计与实现(探索)第7篇——最近踩坑记录
  8. 企业级 php框架,kfzphp: 致力于为企业和个人创造出大道至简的企业级PHP开发框架...
  9. down 网卡端口周期性的up_down 网卡端口周期性的up_思科交换机端口down或up故障原因...
  10. 场景法设计测试用例atm_测试用例设计经典面试题之电梯、杯子、笔、桌子、洗衣机、椅子、ATM等...