在 POSIX 系统上,对于每个进程,内核都维护着一张当前打开着的文件和资源的表格。 每个打开的文件都分配了一个称为文件描述符的简单的数字标识符。 在系统层,所有文件系统操作都使用这些文件描述符来标识和跟踪每个特定的文件。 Windows 系统使用了一个虽然不同但概念上类似的机制来跟踪资源。 为了简化用户的工作,Node.js 抽象出操作系统之间的特定差异,并为所有打开的文件分配一个数字型的文件描述符。

    fs.open() 方法用于分配新的文件描述符。 一旦被分配,则文件描述符可用于从文件读取数据、向文件写入数据、或请求关于文件的信息。

    1. fs.open('/open/some/file.txt', 'r', (err, fd) => {
    2. if (err) throw err;
    3. fs.fstat(fd, (err, stat) => {
    4. if (err) throw err;
    5. // 使用文件属性。
    6. // 始终关闭文件描述符!
    7. fs.close(fd, (err) => {
    8. if (err) throw err;
    9. });
    10. });
    11. });

    大多数操作系统限制在任何给定时间内可能打开的文件描述符的数量,因此当操作完成时关闭描述符至关重要。 如果不这样做将导致内存泄漏,最终导致应用程序崩溃。