做了6年的Java,docker端口映射无法外部访问

1.1. 操作系统简介

我通过以下四点介绍什么是操作系统:

  1. 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基石。
  2. 操作系统本质上是一个运行在计算机上的软件程序 ,用于管理计算机硬件和软件资源。 举例:运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件。
  3. 操作系统存在屏蔽了硬件层的复杂性。 操作系统就像是硬件使用的负责人,统筹着各种相关事项。
  4. 操作系统的内核(Kernel)是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理

内核(Kernel)在后文中会提到。

1.2. 操作系统简单分类

1.2.1. Windows

目前最流行的个人桌面操作系统 ,不做多的介绍,大家都清楚。界面简单易操作,软件生态非常好。

玩玩电脑游戏还是必须要有 Windows 的,所以我现在是一台 Windows 用于玩游戏,一台 Mac 用于平时日常开发和学习使用。

1.2.2. Unix

最早的多用户、多任务操作系统 。后面崛起的 Linux 在很多方面都参考了 Unix。

目前这款操作系统已经逐渐逐渐退出操作系统的舞台。

1.2.3. Linux

Linux 是一套免费使用、开源的类 Unix 操作系统。 Linux 存在着许多不同的发行版本,但它们都使用了 Linux 内核

严格来讲,Linux 这个词本身只表示 Linux 内核,在 GNU/Linux 系统中,Linux 实际就是 Linux 内核,而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。单独的 Linux 内核并不能成为一个可以正常工作的操作系统。

很多人更倾向使用 “GNU/Linux” 一词来表达人们通常所说的 “Linux”。

1.2.4. Mac OS

苹果自家的操作系统,编程体验和 Linux 相当,但是界面、软件生态以及用户体验各方面都要比 Linux 操作系统更好。

1.3. 操作系统的内核(Kernel

我们先来看看维基百科对于内核的解释,我觉得总结的非常好!

内核(英语:Kernel,又称核心)在计算机科学中是一个用来管理软件发出的数据 I/O(输入与输出)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及电脑中其他电子组件进行处理,是现代操作系统中最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定一个程序在什么时候对某部分硬件操作多长时间。 直接对硬件操作是非常复杂的。所以内核通常提供一种硬件抽象的方法,来完成这些操作。有了这个,通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别是处理器及 IO 设备)。

早期计算机系统的设计中,还没有操作系统的内核这个概念。随着计算机系统的发展,操作系统内核的概念才渐渐明晰起来了!

简单概括两点:

  1. 操作系统的内核(Kernel)是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
  2. 操作系统的内核是连接应用程序和硬件的桥梁,决定着操作系统的性能和稳定性。

1.4. 中央处理器(CPU,Central Processing Unit)

关于 CPU 简单概括三点:

  1. CPU 是一台计算机的运算核心(Core)+控制核心( Control Unit),可以称得上是计算机的大脑。
  2. CPU 主要包括两个部分:控制器+运算器。
  3. CPU 的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。

1.5. CPU vs Kernel(内核)

很多人容易无法区分操作系统的内核(Kernel)和中央处理器(CPU),你可以简单从下面两点来区别:

  1. 操作系统的内核(Kernel)属于操作系统层面,而 CPU 属于硬件。
  2. CPU 主要提供运算,处理各种指令的能力。内核(Kernel)主要负责系统管理比如内存管理,它屏蔽了对硬件的操作。

下图清晰说明了应用程序、内核、CPU 这三者的关系。

1.6. 系统调用

介绍系统调用之前,我们先来了解一下用户态和系统态。

根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别:

  1. 用户态(user mode) : 用户态运行的进程或可以直接读取用户程序的数据。
  2. 系统态(kernel mode): 可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。

说了用户态和系统态之后,那么什么是系统调用呢?

我们运行的程序基本都是运行在用户态,如果我们调用操作系统提供的系统态级别的子功能咋办呢?那就需要系统调用了!

也就是说在我们运行的用户程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。

这些系统调用按功能大致可分为如下几类:

  • 设备管理 :完成设备的请求或释放,以及设备启动等功能。
  • 文件管理 :完成文件的读、写、创建及删除等功能。
  • 进程控制 :完成进程的创建、撤销、阻塞及唤醒等功能。
  • 进程通信 :完成进程之间的消息传递或信号传递等功能。
  • 内存管理 :完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。

我在网上找了一个图,通过这个图可以很清晰的说明用户程序、系统调用、内核和硬件之间的关系。(太难了~木有自己画

2. 初探 Linux

2.1. Linux 简介

我们上面已经简单了 Linux,这里只强调三点。

  • 类 Unix 系统 : Linux 是一种自由、开放源码的类似 Unix 的操作系统
  • Linux 本质是指 Linux 内核 : 严格来讲,Linux 这个词本身只表示 Linux 内核,单独的 Linux 内核并不能成为一个可以正常工作的操作系统。所以,就有了各种 Linux 发行版。
  • Linux 之父 : 一个编程领域的传奇式人物,真大佬!我辈崇拜敬仰之楷模。他是 Linux 内核 的最早作者,随后发起了这个开源项目,担任 Linux 内核的首要架构师。他还发起了 Git 这个开源项目,并为主要的开发者。

2.2. Linux 诞生

1989 年,Linus Torvalds 进入芬兰陆军新地区旅,服 11 个月的国家义务兵役,军衔为少尉,主要服务于计算机部门,任务是弹道计算。服役期间,购买了安德鲁·斯图尔特·塔能鲍姆所著的教科书及 minix 源代码,开始研究操作系统。1990 年,他退伍后回到大学,开始接触 Unix。

Minix 是一个迷你版本的类 Unix 操作系统,由塔能鲍姆教授为了教学之用而创作,采用微核心设计。它启发了 Linux 内核的创作。

1991 年,Linus Torvalds 开源了 Linux 内核。Linux 以一只可爱的企鹅作为标志,象征着敢作敢为、热爱生活。

2.3. 常见 Linux 发行版本有哪些?

Linus Torvalds 开源的只是 Linux 内核,我们上面也提到了操作系统内核的作用。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。

内核主要负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。

Linux 的发行版本可以大体分为两类:

  • 商业公司维护的发行版本,以著名的 Red Hat 为代表,比较典型的有 CentOS 。
  • 社区组织维护的发行版本,以 Debian 为代表,比较典型的有 Ubuntu、Debian。

对于初学者学习 Linux ,推荐选择 CentOS 。

##3. Linux 文件系统概览

3.1. Linux 文件系统简介

在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。 也就是说在 Linux 系统中有一个重要的概念:一切都是文件

其实这是 UNIX 哲学的一个体现,在 UNIX 系统中,把一切资源都看作是文件,Linux 的文件系统也是借鉴 UNIX 文件系统而来。

3.2. inode 介绍

inode 是 linux/unix 文件系统的基础。那么,inode 是什么?有什么作用呢?

硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。文件数据存储在块中。块的最常见的大小是 4kb,约为 8 个连续的扇区组成(每个扇区存储 512 字节)。一个文件可能会占用多个 block,但是一个块只能存放一个文件。

虽然,我们将文件存储在了块(block)中,但是我们还需要一个空间来存储文件的 元信息 metadata :如某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等。这种 存储文件元信息的区域就叫 inode,译为索引节点:i(index)+node。 每个文件都有一个 inode,存储文件的元信息。

可以使用 stat 命令可以查看文件的 inode 信息。每个 inode 都有一个号码,Linux/Unix 操作系统不使用文件名来区分文件,而是使用 inode 号码区分不同的文件。

简单来说:inode 就是用来维护某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等信息。

简单总结一下:

  • inode :记录文件的属性信息,可以使用 stat 命令查看 inode 信息。
  • block :实际文件的内容,如果一个文件大于一个块时候,那么将占用多个 block,但是一个块只能存放一个文件。(因为数据是由 inode 指向的,如果有两个文件的数据存放在同一个块中,就会乱套了)

3.3. Linux 文件类型

Linux 支持很多文件类型,其中非常重要的文件类型有: 普通文件目录文件链接文件设备文件管道文件Socket 套接字文件等。

  • 普通文件(-) : 用于存储信息和数据, Linux 用户可以根据访问权限对普通文件进行查看、更改和删除。比如:图片、声音、PDF、text、视频、源代码等等。
  • 目录文件(d,directory file) :目录也是文件的一种,用于表示和管理系统中的文件,目录文件中包含一些文件名和子目录名。打开目录事实上就是打开目录文件。
  • 符号链接文件(l,symbolic link) :保留了指向文件的地址而不是文件本身。
  • 字符设备(c,char) :用来访问字符设备比如硬盘。
  • 设备文件(b,block) : 用来访问块设备比如硬盘、软盘。
  • 管道文件(p,pipe) : 一种特殊类型的文件,用于进程之间的通信。
  • 套接字(s,socket) :用于进程间的网络通信,也可以用于本机之间的非网络通信。

3.4. Linux 目录树

所有可操作的计算机资源都存在于目录树这个结构中,对计算资源的访问,可以看做是对这棵目录树的访问。

Linux 的目录结构如下:

Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:

常见目录说明:

  • /bin: 存放二进制可执行文件(ls、cat、mkdir 等),常用命令一般都在这里;
  • /etc: 存放系统管理和配置文件;
  • /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户 user 的主目录就是/home/user,可以用~user 表示;
  • /usr : 用于存放系统应用程序;
  • /opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把 tomcat 等都安装到这里;
  • /proc: 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
  • /root: 超级用户(系统管理员)的主目录(特权阶级o);
  • /sbin: 存放二进制可执行文件,只有 root 才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如 ifconfig 等;
  • /dev: 用于存放设备文件;
  • /mnt: 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
  • /boot: 存放用于系统引导时使用的各种文件;
  • /lib : 存放着和系统运行相关的库文件 ;
  • /tmp: 用于存放各种临时文件,是公用的临时文件存储点;
  • /var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
  • /lost+found: 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows 下叫什么.chk)就在这里。

4. Linux 基本命令

下面只是给出了一些比较常用的命令。推荐一个 Linux 命令快查网站,非常不错,大家如果遗忘某些命令或者对某些命令不理解都可以在这里得到解决。

4.1. 目录切换命令

  • cd usr 切换到该目录下 usr 目录
  • cd ..(或cd../) 切换到上一层目录
  • cd / 切换到系统根目录
  • cd ~ 切换到用户主目录
  • cd - 切换到上一个操作所在目录

4.2. 目录的操作命令(增删改查)

  • mkdir 目录名称 增加目录。
  • ls/ll(ll 是 ls -l 的别名,ll 命令可以看到该目录下的所有目录和文件的详细信息):查看目录信息。
  • find 目录 参数 寻找目录(查)。示例:① 列出当前目录及子目录下所有文件和文件夹: find .;② 在/home目录下查找以.txt 结尾的文件名:find /home -name "*.txt" ,忽略大小写: find /home -iname "*.txt" ;③ 当前目录及子目录下查找所有以.txt 和.pdf 结尾的文件:find . \( -name "*.txt" -o -name "*.pdf" \)find . -name "*.txt" -o -name "*.pdf"
  • mv 目录名称 新目录名称 修改目录的名称(改)。注意:mv 的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作。mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。后面会介绍到 mv 命令的另一个用法。
  • mv 目录名称 目录的新位置 移动目录的位置—剪切(改)。注意:mv 语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。另外 mv 与 cp 的结果不同,mv 好像文件“搬家”,文件个数并未增加。而 cp 对文件进行复制,文件个数增加了。
  • cp -r 目录名称 目录拷贝的目标位置 拷贝目录(改),-r 代表递归拷贝 。注意:cp 命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r 递归。
  • rm [-rf] 目录 : 删除目录(删)。注意:rm 不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用rm -rf 目录/文件/压缩包。

4.3. 文件的操作命令(增删改查)

  • touch 文件名称: 文件的创建(增)。
  • cat/more/less/tail 文件名称 :文件的查看(查) 。命令 tail -f 文件 可以对某个文件进行动态监控,例如 tomcat 的日志文件, 会随着程序的运行,日志会变化,可以使用 tail -f catalina-2016-11-11.log 监控 文 件的变化 。
  • vim 文件 修改文件的内容(改)。vim 编辑器是 Linux 中的强大组件,是 vi 编辑器的加强版,vim 编辑器的命令和快捷方式有很多,但此处不一一阐述,大家也无需研究的很透彻,使用 vim 编辑修改文件的方式基本会使用就可以了。在实际开发中,使用 vim 编辑器主要作用就是修改配置文件,下面是一般步骤: vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入 wq 代表写入内容并退出,即保存;输入 q!代表强制退出不保存)。
  • rm -rf 文件 删除文件(删)。

4.4. 压缩文件的操作命令]

1)打包并压缩文件:

Linux 中的打包文件一般是以.tar 结尾的,压缩的命令一般是以.gz 结尾的。而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。 命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件 ,其中:

  • z:调用 gzip 压缩命令进行压缩
  • c:打包文件
  • v:显示运行过程
  • f:指定文件名

比如:假如 test 目录下有三个文件分别是:aaa.txt bbb.txt ccc.txt,如果我们要打包 test 目录并指定压缩后的压缩包名称为 test.tar.gz 可以使用命令:tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txttar -zcvf test.tar.gz /test/

Java面试核心知识点笔记

其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

Java中高级面试高频考点整理

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

更多Java进阶知识笔记文档分享,这些对于面试还是学习来说都是一份不错的学习资料

有需要的朋友可以戳这里即可免费领取

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

最后还分享Java进阶学习及面试必备的视频教学

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

**

[外链图片转存中…(img-efrlH8rB-1625826553974)]

更多Java进阶知识笔记文档分享,这些对于面试还是学习来说都是一份不错的学习资料

有需要的朋友可以戳这里即可免费领取

[外链图片转存中…(img-D1Pc5Or4-1625826553974)]

最后还分享Java进阶学习及面试必备的视频教学

[外链图片转存中…(img-i4fEgo15-1625826553975)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做了6年的Java,mysql配置环境变量mac

一:打破狭窄的技术视野 ①真实项目对外开发系统性讲解 ②例如电商、教育行业、社区网站等主流互联网场景的商业解决方案讲解 ③针对不同业务场景海量数据或者访问量以及及时响应等所面临的挑战进行对应的瓶颈分析。 ④拓展技术视野,与一线大厂零距离…

做了三年Java,docker网络映射配置

数据库 2.1 池化技术:如何减少频繁创建数据库连接的性能损耗?2.2 数据库优化方案(一):查询请求增加时,如何做主从分离?2.3 数据库优化方案(二):写入数据量增…

入职阿里啦!docker-e命令参数

JAVA基础 JAVA异常分类及处理异常分类异常的处理方式Throw和throws的区别JAVA反射动态语言反射机制概念 (运行状态中知道类所有的属性和方法)Java反射API反射使用步骤(获取Class对象、调用对象方法)获取Class对象的3种方法创建对…

全套学习!java排序sort方法

字节跳动 ⾯试前⼀⾯⼆⾯⼩结 ⾯试前 头条的⾯试是三家⾥最专业的,每次⾯试前有专⻔的HR和你约时间,确定OK后再进⾏⾯试。每次都是通过视频⾯试,因为都是之前都是电话⾯或现场⾯,所以视频⾯试还是有点不⾃然。也有⼈觉得视频⾯试…

【排序算法】计数排序

当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。 由于用来计数的数组B的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1&#xff0…

全套学习!mysql2003错误代码

正文 在写这个文章之前,我花了点时间,自己臆想了一个电商系统,基本上算是麻雀虽小五脏俱全,我今天就用它开刀,一步步剖析,我会讲一下我们可能会接触的技术栈可能不全,但是够用,最后…

全套学习!mysql命令窗口执行sql文件

阿里P8级架构师核心理论落地篇 再造淘宝,贯穿全系,阿里团队代码落地,详细每个版本迭代,拒绝2-3个月PPT架构师再造淘宝之咚宝-技术支撑-完整搭建DevOps再造淘宝之咚宝-统一规则-代码规范落地解析再造淘宝之咚宝搭建基础服务再造淘…

java招聘职位描述,附学习笔记+面试整理+进阶书籍

面:为什么要使用双亲委派机制去加载类? 答:避免多份同样字节码的加载,浪费内存。 类的加载方式 隐式加载:new显示加载:loadClass、forName等 类的装载过程如下图: 面:loadClass和…

java拦截器和过滤器,2021最新版!

正文 现在市面上的算法资料也五花八门,种类繁多,小编也整理了一份不同于市面且有意思的算法资料,不能说多全面,但是是小编花了很长时间整理归纳出来的,自我感觉还行。分享给同事及群里反响都不错,所以小编…

java排列组合算法优缺点,一招彻底弄懂!

一. 为什么使用spring cloud alibaba 很多人可能会问,有了spring cloud这个微服务的框架,为什么又要使用spring cloud alibaba这个框架了? 最重要的原因在于spring cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础…

001 出错处理

函数strerror() 1.1 函数原型 char *strerror(int errnum)分析&#xff1a;此函数将errnum&#xff08;它通常就说errno值&#xff09;映射为一个出错信息字符串&#xff0c;并返回错误此字符串 。 1.2 代码清单 #include <stdio.h> #include <string.h> #inclu…

java接口作用和好处,持续更新大厂面试笔试题

业界常用的服务注册与发现组件对比 了解服务注册与发现的基本原理后&#xff0c;如果你要在项目中使用服务注册与发现组件&#xff0c;当面对众多的开源组件该如何进行技术选型&#xff1f; 在互联网公司里&#xff0c;有研发实力的大公司一般会选择自研或者基于开源组件进行…

第七章 进程环境 | 001 命令形参、gcc与g++的使用

命令形参 命令行参数是使用main()函数参数来处理的&#xff0c;其中&#xff0c;argc是指传入参数的个数&#xff0c;argv[]是一个指针数组&#xff0c;指向传递给程序的每个参数。 应当指出的是&#xff0c; argv[0]存储程序的名称&#xff0c;argv[1]是一个指向第一个命令行…

java接口实例化对象和类实例化对象,附赠课程+题库

面试整体事项 简历要准备好&#xff0c;联系方式一定要正确清晰醒目&#xff0c;项目经历按照时间倒序阐述&#xff0c;注意描述自己在项目中承担的职责&#xff0c;简历的模板尽量选择简洁的&#xff0c;毕竟程序员大部分还是喜欢简单明了的。推荐boss直聘&#xff0c;我觉得…

java接口开发规范,干货满满

第一个模块&#xff1a;数据库 1.1 腾讯数据库面试问题 解释ACID四大特性 原子性的底层实现 数据库宕机后恢复的过程 如何保证事务的ACID特性 MySQL日志类型 这5个题目相对来说是比较普遍的&#xff0c;这里我就不一一给出答案了&#xff0c;给大家看下我的那个数据库学…

001 makefile的使用

标题 标题 当我们有多个源程序时&#xff0c;用gcc每个都编译&#xff0c;这样我们没有修改过的源文件也得重新编译一次&#xff0c;很麻烦&#xff0c;这时候写makefile就派上了用场&#xff0c;可以大大的提高我们的编码和调试速度。( 注意&#xff1a;头文件并不参加链接和…

java接口的修饰符可以为,附架构师必备技术详解

第一章 MySQL入门与初步 1.1 MYSQL 简介 1.2 关系数据库管理系统 1.3 MYSQL 使用的 SQL 语言 1.4 MYSQL 数据处理 第二章 MySQL的安装 2.1 MYSQL 系统的安装布局 2.2 安装 MYSQL 系统的分发 2.3 安装后期的的设置与测试 2.4 系统的升级 2.5 在同一台机器上运行多个 MYSQL 服务…

ALSA【一】

ALSA是Advanced Linux Sound Architecture 的缩写&#xff0c;目前已经成为了linux的主流音频体系结构。 在内核设备驱动层&#xff0c;ALSA提供了alsa-driver&#xff0c;同时在应用层&#xff0c;ALSA为我们提供了alsa-lib&#xff0c;应用程序只要调用alsa-lib提供的API&…

java接口的定义与实现,学习路线+知识点梳理

Spring框架自诞生以来一直备受开发者青睐&#xff0c;有人亲切的称之为&#xff1a;Spring 全家桶。Spring更是避免了重复造轮子的工作并跟随着互联网行业的发展做出不断的更新&#xff0c;很多研发人员把spring看作心目中最好的Java项目&#xff0c;没有之一。 **可以毫不夸张…

第3章 文件IO | 001 文件描述符

概述 在Linux系统中一切皆可以看成是文件&#xff0c;文件又可分为&#xff1a;普通文件、目录文件、链接文件和设备文件。文件描述符&#xff08;file descriptor&#xff09;是内核为了高效管理已被打开的文件所创建的索引&#xff0c;其是一个非负整数&#xff08;通常是小整…