我正在用 C 构建这个文件系统。目前我正处于作业的第一步,即创建一个在内存中运行的简单文件系统。我的问题更多地基于 C 而不是围绕 Unix 文件系统。我正在尝试“模拟”原始磁盘。我有以下结构:
struct disk {
void *data;
unsigned int numOfBlocks;
};
让我们假设这个磁盘上的一个 block 是 512 字节(就像原始的 Unix 文件系统)。我定义了一些函数来创建磁盘、从磁盘读取和写入磁盘。然后我的工作就是实现各种东西,例如数据 block 、i 节点 block 、 super block 等。
查看上面的 void *data
变量。我希望这是一个二维数组。它应该是 block 数组的数组。所以...最有意义的是使用这样的东西。
unsigned char *data[30][512];//假设磁盘包含 30 个 block ,每个 block 512 字节
问题来了:如果我定义了其他结构来表示 i 节点、 super block 或数据 block ,并且每个结构也有 512 字节的 struct
大小,如何我正确地将此 unsigned char *
转换为 i-node struct
或数据 struct
等?
谢谢。
最佳答案
我不确定我是否理解了这个问题。
根据您的说法:
我的问题不是如何访问数据变量中的字符...而是如何获取一个 512 字节的 unsigned char 数组,并将其转换为其他类型的 512 字节长的结构。
如果你有:
unsigned char block[512];
和:
//total struct size: 512 bytes
struct something {
//members here
};
你可以这样做:
int main(void)
{
struct something *ptr;
ptr = block;
return 0;
}
您可以只使用数组字节来保存结构数据。为避免警告,请转换地址:
ptr = (struct something *)block;
将内存分配给指针后,您可以像往常一样使用它。
注意:由于我是初学者,所以我可能是错的。
关于创建文件系统,需要 C 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390649/