2013-10-15 70 views
2

我建立这个文件系统C.在我上这仅仅是创建一个简单的文件系统,在内存中的工作分配的第一步的时刻。我的问题更多基于C而不是Unix文件系统。我试图“模拟”一个原始磁盘。我有以下结构:创建文件系统,需要Ç建议

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

让我们假设这个磁盘上的块将是512个字节(像原来的UNIX文件系统)。我定义了一些函数来创建磁盘,从磁盘读取数据并写入磁盘。那么我的工作就是实现诸如数据块,i节点块,超级块等各种东西。

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

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

这里谈到的问题:如果我有定义为代表的i节点,一个超级块,或数据块,其它结构和每个还具有struct大小的512个字节,怎么可以正确施放此unsigned char *到i节点struct,或数据struct等?

谢谢。

回答

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; 

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

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

0

void指向任何东西,所以如果你有控制void *的含义,那么你的定义就足够了。

要访问data为一个二维数组,你只需要转换类型((char (*)[512])data

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

编译器不需要知道第二尺寸的大小,它是你的责任,以使确保你的程序永远不会访问无效的位置。

+0

我的问题岂不等于如何访问数据变量的人物......这是怎么走的'无符号char'一个512字节数组实例,并将其转换为其他类型的struct'的'是512个字节长。更新了 – MasterGberry

+0

,您需要设置第一个维度的大小。 –