我正在用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节点、超级块或数据块,并且每个结构的大小也都是512字节,那么我如何才能将此结构正确地转换为I节点或数据等?
谢谢。
最佳答案
我不确定我是否理解这个问题。
从你所说的: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;
将内存分配给指针后,可以像平常一样使用它。
注:我可能是错的,因为我是初学者。
关于c - 创建文件系统,需要C的建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19390649/