>[success] # 文件描述符
1. 文件描述符(File descriptors)是在Unix及类Unix操作系统中用于标识打开文件或I/O设备的整数标识符。**对于每个进程,内核维护着一张当前打开的文件和资源表格,每个打开的文件都分配了一个文件描述符。在系统层,所有文件系统操作都使用这些文件描述符来标识和跟踪每个特定的文件**,**Windows** 系统使用了一个虽然不同但概念上类似的机制来跟踪资源
* 每个打开的文件都分配了一个称为文件描述符的简单的数字标识符。
* 在系统层,所有文件系统操作都使用这些文件描述符来标识和跟踪每个特定的文件。
2. 文件描述符的主要作用有:
* 用于标识打开的文件或设备。
* 用于进行文件的读写操作。
* 用于进行文件的控制操作,例如文件截断、文件锁定等。
3. 在Node.js中,Node.js为了简化用户的工作,抽象出操作系统之间的特定差异,并为所有打开的文件分配一个数字型的文件描述符,从而提供了一种跨平台的文件操作方式,`FileHandle`类是用于表示文件操作的句柄对象,它提供了一种新的方式来操作文件系统,相比于传统的回调函数方式,它更加简单、清晰、易于维护。使用FileHandle类可以进行文件的**读取、写入、截断等操作**,并且提供了很多方便的方法,例如通过`FileHandle`对象的`withFd()`方法可以直接获取文件描述符,**从而可以使用底层的系统调用进行操作,提高了性能**。
4. node 中常见的`FileHandle` 类的api
| API名称 | 描述 | 参数 |
| --- | --- | --- |
| Event: 'close' | 当文件被关闭时触发的事件 | 无 |
| filehandle.appendFile(data\[, options\]) | 异步地将数据追加到文件中 | data | | | | | ,options |
| filehandle.chmod(mode) | 异步地修改文件的权限 | mode |
| filehandle.chown(uid, gid) | 异步地修改文件的所有者 | uid,gid |
| filehandle.close() | 异步地关闭文件 | 无 |
| filehandle.createReadStream(\[options\]) | 以异步方式创建一个可读流来从文件读取数据 | options |
| filehandle.createWriteStream(\[options\]) | 以异步方式创建一个可写流来写入数据到文件中 | options |
| filehandle.datasync() | 将文件数据缓存内容同步到磁盘 | 无 |
| filehandle.fd | 获取文件描述符 | 无 |
| filehandle.read(buffer, offset, length, position) | 异步地从文件中读取数据到缓冲区 | buffer | ,offset,length,position |
| filehandle.read(\[options\]) | 异步地从文件中读取数据 | options |
| filehandle.read(buffer\[, options\]) | 异步地从文件中读取数据到缓冲区 | buffer | ,options |
| filehandle.readableWebStream() | 以异步方式创建一个可读取的WebStream | 无 |
| filehandle.readFile(options) | 异步地从文件中读取数据到一个字符串或者Buffer | options |
| filehandle.readLines(\[options\]) | 异步地从文件中读取数据并将其拆分成行 | options |
| filehandle.readv(buffers\[, position\]) | 异步地将文件内容读取到缓冲区数组 | buffers>,position |
| filehandle.stat(\[options\]) | 异步地获取文件信息 | options |
| filehandle.sync() | 将文件缓存内容同步到磁盘 | 无 |
| filehandle.truncate(len) | 异步地截断文件 | len |
| filehandle.utimes(atime, mtime) | 异步地修改文件的访问时间和修改时间 | atime | | ,mtime | | |
| filehandle.write(buffer, offset\[, length\[, position\]\]) | 异步地将数据写入到文件中 | buffer | ,offset,length,position |
| filehandle.write(buffer\[, options\]) | 异步地将数据写入到文件中 | buffer | ,options |
| filehandle.write(string\[, position\[, encoding\]\]) | 异步地将数据以字符串形式写入到文件中 | string,position,encoding |
| filehandle.writeFile(data, options) | 异步地将数据写入到文件中 | data | | | | | ,options |
| filehandle.writev(buffers\[, position\]) | 将数据写入到文件中 | buffers>,position |
>[info] ## 使用 FileHandle api
| API | 功能 |
| --- | --- |
| fs.promises.open() | 打开文件 |
| fs.promises.opendir() | 打开目录 |
| fs.promises.createWriteStream() | 创建可写流 |
| fs.promises.createReadStream() | 创建可读流 |
- 基础
- 什么是Node.js
- 理解 I/O 模型
- 理解node 中 I/O
- 对比node 和java 使用场景
- node 模块管理
- 内置模块 -- buffer
- 内置模块 -- fs
- fs -- 文件描述符
- fs -- 打开文件 api
- fs -- 文件读取 api
- fs -- 文件写入 api
- fs -- 创建目录 api
- fs -- 读取文件目录结构 api
- fs -- 文件状态(信息) api
- fs -- 删除文件/目录 api
- fs -- 重命名 api
- fs -- 复制文件 api
- 内置模块 -- events
- 内置模块 -- stream
- 可读流 -- Readable
- 可写流 -- Writable
- Duplex
- Transform
- 内置模块 -- http
- http -- 从客户端发起
- http -- 从服务端发起
- 内置模块 -- url
- 网络开发