此为牛客网Linux C++课程1.19课程笔记。

1. 文件描述符表


如图,我们知道每个进程都有其虚拟地址空间(0~4G),其中3 ~ 4G部分为内核区。进程的进程控制块保存就在内核区,而PCB中维护一个打开文件描述符表,每个进程都有这样一张表,表在实现上是一个指针数组,数组中每个元素都是一个指向file类型的指针,也就指向一个打开的文件。

而文件描述符就是该文件描述符表的的索引值,也就是序号,每当打开一个新文件,则占用一个文件描述符,而且是空闲的最小的一个文件描述符。

文件描述符表的前三项是固定的,分别是标准输入、标准输出和标准错误,对应的文件是当前终端。

2. 如何通过文件描述符找到文件

首先用文件描述符找到文件描述符表的文件指针,用这个文件指针去系统维护的打开文件表中找i-node,通过i-node最后找到硬盘中文件的最终位置,具体可参考:

https://blog.csdn.net/qq_28114615/article/details/94590598

http://www.itqiankun.com/article/file-fd

【Linux系统编程学习】 文件描述符相关推荐

  1. 【Linux系统编程】文件描述符的复制dup()和dup2()

    00. 目录 文章目录 00. 目录 01. 文件描述符复制概述 02. 常用函数 2.1 dup函数 2.2 dup2函数 03. 案例实战 3.1 dup示例 3.2 dup2示例 04. 附录 ...

  2. 【Linux系统编程】 文件描述符的复制:dup()和dup2()

    dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件. 这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当 ...

  3. Linux系统编程——基于文件描述符的文件操作(1)

    概要: 打开.创建和关闭文件 读写文件 文件定位 获取文件信息 打开.创建和关闭文件 函数原型: #include <sys/types.h> //头文件 #include <sys ...

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

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

  5. linux线程并不真正并行,Linux系统编程学习札记(十二)线程1

    Linux系统编程学习笔记(十二)线程1 线程1: 线程和进程类似,但是线程之间能够共享更多的信息.一个进程中的所有线程可以共享进程文件描述符和内存. 有了多线程控制,我们可以把我们的程序设计成为在一 ...

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

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

  7. linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数

    linux系统编程学习_(2)进程控制-- fork函数.exec函数族.回收子进程–孤儿进程僵尸进程.wait函数 进程控制 fork()函数 创建一个子进程. pid_t fork(void); ...

  8. linux c中的文件描述符与打开文件之间的关系

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通 ...

  9. linux系统编程之文件与I/O(六):fcntl 函数与文件锁

    2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报  分类: linux系统编程(19)  版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...

  10. 嵌入式Linux系统编程学习之二常用命令

    嵌入式Linux系统编程学习之二常用命令 文章目录 嵌入式Linux系统编程学习之二常用命令 前言 一.常用命令 1.su(用户切换) 2.useradd(添加用户) 3.passwd(修改密码) 4 ...

最新文章

  1. CVPR 2020丨UDVD:用于可变退化的统一动态卷积超分辨率网络
  2. 嵌入式Linux开发环境的搭建
  3. SpringBoot | 第十五章:基于Postman的RESTful接口测试
  4. oracle tranc,oracle函数trunc的使用
  5. java调用spark_spark中的并行方法调用以及传递方法中使用spark会话
  6. 从0开始搭建一个战棋游戏的AI(初级教程)
  7. 深度有趣 | 01 前言
  8. 工厂模式个人案例_工厂设计模式案例研究
  9. 用c语言实现倍增原理,RLE算法变体C语言实现
  10. 转 Mac 使用ab性能测试工具
  11. python 分解模数_Python模数
  12. 利用java反射根据方法名称字符串调用方法
  13. Wireguard笔记
  14. Redis迭代查询详解及其使用:Scan命令、Sscan命令、Hscan命令、Zscan命令
  15. 一起学英语 | 用JavaScript实现数字阶乘的三种方法
  16. retrofit应用详解与源码解析--源码解析
  17. 2021/06/20 1+X 大数据应用开发(Java)中级实操考试
  18. QQ列表的收缩展开,带动画效果
  19. shiro集成springboot的脚手架
  20. 解决google扩展程序已损坏的问题

热门文章

  1. node--更新数据库问题
  2. 数据库---T-SQL语句(一)
  3. Swift基础语法: 30 - Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写
  4. 使用delphi 开发多层应用(十)安全访问服务器
  5. linux测试地址是否能访问_一个小测试能看出孩子注意力是否集中,提前弥补,上小学会很轻松...
  6. java图形界面的监听_非专业码农 JAVA学习笔记 用户图形界面设计与实现-所有控件的监听事件...
  7. 计算机图形学试题a卷,计算机图形学复习题及答案
  8. php cpu mac,PHP 获得计算机的唯一标识[CPU,网卡 MAC地址]
  9. 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)
  10. C++多线程快速入门(四)shared_mutex以及读写锁应用