有没有一种方法可以在Node.js中获得lseek的返回值?

时间:2019-11-22 07:48:34

标签: node.js fs

fs.readfs.write处阅读时,似乎在Node.js中没有直接暴露出与“ C”函数lseek的接口;可以通过参数fs.read在任何fs.writeposition之前更改当前文件描述符的位置。

我强烈怀疑,在较低级别上,参数position是在读或写操作之前通过lseek调用处理的,但是'lseek'的返回值呢?

更具体地说,要获取当前文件描述符位置,可以在“ C”中编写:

int position = lseek(fd, 0, SEEK_CUR);

Node.js中是否可以获取相同的信息?

3 个答案:

答案 0 :(得分:4)

似乎没有“本机”的方式。可能是因为

在同一文件上多次使用fs.write ***()不等待进行回调是不安全的

对于{strong>缓冲 IO,使用write***之类的东西更是如此。在read***chunk.length之后但在调用回调之前应该返回什么?

但是您可以尝试在bytesReadbytesWritten的帮助下自己跟踪当前位置。并且在流的情况下有SELECT col1,col2,col3,col4 from Table where col1 in ('val1','val2','val3','val4') ,但在字符串的情况下请不要忘记编码。


作为旁注...您写道:

考虑新功能,我认为这可能是有用的信息

如果没有人要求它,而您自己不确定它可以用作什么,那么我认为行使YAGNI原则是个好主意。

答案 1 :(得分:1)

我强烈怀疑,在底层,参数位置是在读写操作之前通过lseek调用处理的,但是lseek的返回值呢?

Ben Noordhuis(libuv维护者)说,它不是在引擎盖下使用的:

lseek()是不可预测的 并发的读者或作家。 libuv的方法是使用位置 读取和写入(uv_fs_read()的offset参数和 uv_fs_write()。)

This issue on node.js GitHub讨论他们如何管理position参数以将数据读写到文件中。

Node.js中是否有一种获取相同信息的方法?

The accepted answer很好地解释了如何做到这一点:您需要跟踪读取和写入的字节。

答案 2 :(得分:-1)

在Node.js中,您可以使用fs.read()fs.write()

节点可以通过使用_filename_dirname变量来告诉您它在文件系统中的哪个位置工作。 filename变量提供了当前正在执行的文件的绝对路径。 dirname提供了到正在执行文件的工作目录的绝对路径。无需从任何模块导入任何变量,因为每个模块都是标准提供的。

使用两个变量的简单示例如下:

console.log(“此文件为” +__filename); console.log(“它位于“ +__dirname);