理解Linux中的read()



我正在查看用于读取(int fd,void*buf,size_t count)的手册页

http://man7.org/linux/man-pages/man2/read.2.html

我需要更多关于"在支持查找的文件上,读取操作从当前文件偏移量开始,文件偏移量按读取的字节数递增。"

1) 如果我不想从头开始读取文件,比如说在偏移量100(字节)处读取1个字节,偏移量100是否添加到fd,即读取(fd+100,buf,1)?如果没有,如何在代码中指定偏移量?

2) 如何知道"文件是否支持查找"?我通过spi总线将FPGA作为spi设备"打开",以获得fd。我正在使用read()读取FPGA的寄存器。在这种情况下,文件支持是否正在寻求?

谢谢!

您需要首先通过readseek调用将文件指针(当前文件偏移量)移动到100。

或者,您可能对spread感兴趣,这取决于您正在做什么。pread相当于原子(1)保存当前偏移,(2)读取要读取的偏移,以及(3)恢复原始偏移。

在第二个问题中,您将知道它是否是一个不可查找的设备,因为您对lseek的呼叫将失败。我不知道有什么可靠的方法可以提前知道。

您使用lseek来移动文件中的可能性,因此您可以执行类似的操作

lseek(fd, 100, SEEK_SET);
read(fd, buffer, 1);

以读取位置100处的一个字节。

然而,虽然这是一个有效的例子,但我建议不要以这种方式读取文件中的单个字节,因为它非常慢/昂贵。

如果您想随机获取文件中的单个字节,您可能更适合使用mmap而不是lseek/read

相关内容

  • 没有找到相关文章

最新更新