如何确定设备数据传输量

如何确定设备数据传输量

有没有办法确定设备传输的数据量?我不是在询问块或扇区大小。我想知道读/写操作传输的数据量。

例如,如果我想传输 1 个 0x200 字节的块:

块=fread((void *)&Block,0x200,1,FILE *fp);

如果我到达文件末尾但只读取了部分块,会发生什么情况?我如何确定实际的字节数。

我意识到我可以做相反的事情,例如:

字节=fread((void *)&Block,1,0x200,FILE *fp);

但是如果我想读取多个块怎么办???

是否有诸如 ioctl(dev, FNUM) 之类的内核函数可以返回实际的字节数?

非常感谢,CB

答案1

正如您所意识到的,您可以使用 1 字节的大小参数,并将项目数设为 0x200。

bytes = fread((void*)&Block, 1, 0x200, fp);

然后 fread 将返回项目数(字节数)实际上读。

通常,fread 会循环读取所有块。或者(取决于您的实际要求)fstatstat可以使用系统调用在读取文件之前获取文件的大小。

fread手册页中可以看出,所引用的短对象计数意味着例如如果读取的文件中存在 0x201 字节,则第一次读取将返回 0x200,第二次读取将返回 1。

返回值

 The functions fread() and fwrite() advance the file position indicator for
 the stream by the number of bytes read or written.  They return the number
 of objects read or written.  If an error occurs, or the end-of-file is
 reached, the return value is a short object count (or zero).

相关内容