本文整理汇总了C++中Disk::ReadAt方法的典型用法代码示例。如果您正苦于以下问题:C++ Disk::ReadAt方法的具体用法?C++ Disk::ReadAt怎么用?C++ Disk::ReadAt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Disk
的用法示例。
在下文中一共展示了Disk::ReadAt方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sizeof
void
dump_double_indirect_stream(Disk& disk, bfs_inode* node, bool showOffsets)
{
if (node->data.max_double_indirect_range == 0)
return;
int32 bytes = node->data.double_indirect.length * disk.BlockSize();
int32 count = bytes / sizeof(block_run);
block_run runs[count];
off_t offset = node->data.max_indirect_range;
ssize_t bytesRead = disk.ReadAt(disk.ToOffset(node->data.double_indirect),
(uint8*)runs, bytes);
if (bytesRead < bytes) {
fprintf(stderr, "couldn't read double indirect runs: %s\n",
strerror(bytesRead));
return;
}
puts("double indirect stream:");
for (int32 i = 0; i < count; i++) {
if (runs[i].IsZero())
return;
printf(" double_indirect[%02" B_PRId32 "] = ", i);
dump_block_run("", runs[i], "");
int32 indirectBytes = runs[i].length * disk.BlockSize();
int32 indirectCount = indirectBytes / sizeof(block_run);
block_run indirectRuns[indirectCount];
bytesRead = disk.ReadAt(disk.ToOffset(runs[i]), (uint8*)indirectRuns,
indirectBytes);
if (bytesRead < indirectBytes) {
fprintf(stderr, "couldn't read double indirect runs: %s\n",
strerror(bytesRead));
continue;
}
for (int32 j = 0; j < indirectCount; j++) {
if (indirectRuns[j].IsZero())
break;
printf(" [%04" B_PRId32 "] = ", j);
char buffer[256];
if (showOffsets)
snprintf(buffer, sizeof(buffer), " %16" B_PRIdOFF, offset);
else
buffer[0] = '\0';
dump_block_run("", indirectRuns[j], buffer);
offset += indirectRuns[j].length * disk.BlockSize();
}
}
}