2

我正在用 C 语言构建这个文件系统。目前我正处于分配的第一步,这只是创建一个在内存中工作的简单文件系统。我的问题更多地基于 C 而不是基于 Unix 文件系统。我正在尝试“模拟”原始磁盘。我有以下结构:

struct disk {
    void *data;
    unsigned int numOfBlocks;
};

让我们假设这个磁盘上的一个块是 512 字节(就像原始的 Unix 文件系统一样)。我定义了一些函数来创建磁盘、从磁盘读取和写入磁盘。然后我的工作就是实现各种东西,例如数据块、i-node 块、超级块等。

void *data上面的变量。我希望这是一个二维数组。它应该是一个块数组的数组。所以......最有意义的是使用这样的东西。

unsigned char *data[30][512]; // Assuming the disk holds 30 blocks of 512 bytes each

问题来了:如果我定义了其他结构来表示 i-node、超级块或数据块,并且每个结构也有struct512 字节的大小,我该如何正确地将其unsigned char *转换为 i-node struct,或者数据struct等?

谢谢。

4

2 回答 2

1

我不确定我是否理解这个问题。

从你说的: My question isn't how to access the characters in the data variable...it's how to take a 512 byte array of unsigned char for instance and convert it to some other type of struct that is 512 bytes long.

如果你有:

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;

将内存分配给指针后,您可以像往常一样使用它。

注意:我可能是错的,因为我是初学者。

于 2013-10-15T22:36:21.123 回答
0

void是指向任何东西,所以如果你能控制什么void *意思,那么你所拥有的定义就足够了。

data作为二维数组访问,您只需转换类型((char (*)[512])data

char *array[512] = data;
byte = array[x][y];

编译器不需要知道第二维的大小,您有责任确保您的程序永远不会访问无效位置。

于 2013-10-15T20:56:25.693 回答