创建文件系统,需要 C 的建议

标签 c unix filesystems

我正在用 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/

相关文章:

shell - 如何在使用 - Shell 脚本建立连接的 SFTP 连接中进行 CD

c - X Window 系统中的一个老缺陷。它是如何工作的?

language-agnostic - 0 字节文件真的是 0 字节吗?

c - WIN32线程程序问题

c - 使多个管道等待每个进程的返回码

linux - 如何 grep 特定行

android - 如何调试 YAFFS?

c - lsof 总是报告偏移量等于 OSX 中的文件大小

c - 使用 malloc 在运行时分配内存时出现段错误

C 对按位移位操作感到困惑