在节点js中使用fd(文件描述符)有什么用处

时间:2016-04-21 13:34:35

标签: node.js

fs.open('input.txt', 'r+', function(err, fd) {
    console.log(fd);
   if (err) {
       return console.error(err);
   }

这里的fd是什么,为什么当我使用console.log()打印它时它会给出3;

4 个答案:

答案 0 :(得分:26)

文件描述符是许多编程语言中使用的概念,它们表示对打开文件的引用。

文件描述符将用于通过所有与文件系统相关的函数引用正确的文件流。

实际上stdout,stdin和stderr也被分配了一个文件描述符,它们占用fd 02,下一个空闲文件描述符值是3.这就是为什么在你的例子中返回的值是3

有关更多背景信息,请参阅Wikipedia

答案 1 :(得分:8)

在您的示例中,fd是传递给callback的{​​{1}}的第二个参数:

  • 重要的是这是第二个参数。
  • 它的名字并不重要。

第二个参数表示文件描述符,对于访问回调中打开的文件非常有用。

例如 1

fs.open

在那里,您将var fs = require("fs"); var fileName = "foo.txt"; fs.exists(fileName, function(exists) { if (exists) { // get information about the file fs.stat(fileName, function(error, stats) { // open the file (getting a file descriptor to it) fs.open(fileName, "r", function(error, fd) { var buffer = new Buffer(stats.size); // read its contents into buffer fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) { var data = buffer.toString("utf8", 0, buffer.length); console.log(data); fs.close(fd); }); }); }); } }); fd的第二个参数)作为第一个参数传递给fs.open,因此您可以读取该文件。

1:取自http://www.sitepoint.com/accessing-the-file-system-in-node-js/

的示例

答案 2 :(得分:1)

值得注意的一个关键信息是fd可以同时用于读写。也就是说,本质上是调用fs.open()的用例。如果要对打开的文件执行多个操作,这将很有用。

这里是一个例子。

fs.open('<directory>', 'r+', (err, fd) =>  {
// r+ is the flag that tells fd to open it in read + write mode.
// list of all system flags: https://nodejs.org/api/fs.html#fs_file_system_flags
// read using fd:https://nodejs.org/api/fs.html#fs_fs_read_fd_buffer_offset_length_position_callback
// write using fd: https://nodejs.org/api/fs.html#fs_fs_write_fd_buffer_offset_length_position_callback
// close the flag: fs.close(fd);
});

答案 3 :(得分:0)

我从c的概念出发。为文件分配了一个编号,该编号分配了对文件位置的引用,因此fd可以在基础代码中帮助找到正在处理的当前文件。