我正在查看用于读取(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的寄存器。在这种情况下,文件支持是否正在寻求?
谢谢!
您需要首先通过read或seek调用将文件指针(当前文件偏移量)移动到100。
或者,您可能对spread感兴趣,这取决于您正在做什么。pread
相当于原子(1)保存当前偏移,(2)读取要读取的偏移,以及(3)恢复原始偏移。
在第二个问题中,您将知道它是否是一个不可查找的设备,因为您对lseek
的呼叫将失败。我不知道有什么可靠的方法可以提前知道。
您使用lseek来移动文件中的可能性,因此您可以执行类似的操作
lseek(fd, 100, SEEK_SET);
read(fd, buffer, 1);
以读取位置100处的一个字节。
然而,虽然这是一个有效的例子,但我建议不要以这种方式读取文件中的单个字节,因为它非常慢/昂贵。
如果您想随机获取文件中的单个字节,您可能更适合使用mmap
而不是lseek/read