c 生成 ext2 文件(直接寻址) - 1

上一节,我们写了 ext2 的格式化函数,格式化后的 disk 能够被 linux 挂载并且正常使用。

本节,将用 c 生成的初始文件。依然以 xrk 文件为例,里面写入 www.xrkxzz.cn。
如果要在根目录下创建新的文件,可以把第三条记录截短,在原来的 0 字节处创建新的记录。
  • 本节计划在上一节的基础上,按照上述方法添加初始文件 xrk,其实就是填表,把根目录的 block[0] 对应的数据块重写,在末尾添加 xrk 信息,比较简单,下面直接上代码:
// 在根目录创建个 xrk 文件,里面写入 www.xrkxzz.cn
void GenAFile()
{
    int i = 0;

    // 写第 3 个 inode         // 使用 第 3 个 inode 作为 xrk 的 inode
    sInode sitmp;
    sitmp.st_mode         = 0x81A4;
    sitmp.user            = 0x0;
    sitmp.size            = 1024;
    sitmp.atime           = 0x4764cc3b;
    sitmp.ctime           = 0x4764cc3b;
    sitmp.mtime           = 0x4764cc3b;
    sitmp.dtime           = 0x4764cc3b;
    sitmp.group           = 0;
    sitmp.links           = 1;      // 必须不为 0,否则文件不会被识别
    sitmp.ocupiedBlocks   = 2;
    sitmp.flags           = 0;
    sitmp.osInfo          = 0;
    sitmp.blocks[0]       = 23;     // 使用第 23 个块做数据块
    for(i=1; i<15; i++)
        sitmp.blocks[i] = 0;
    sLoadInode(3, &sitmp);      // 使用 第 3 个 inode 作为 xrk 的 inode

    // 第 23 个数据块
    char buf[] = "www.xrkxzz.cn\n";
    MFileWriteStringInByte( 23*1024, buf);

    //将对应的位图置 1
    sSetAddrBitN(1024*s_grpDescrpt.blockBmLoc, 23);
    // 更新超级块和块组描述符 freeBlocks
    sUpdateFreeBlocks();

    // 写根目录的 datablock,把 xrk 文件加入
    sDataBlock sdtmp;
    sdtmp.inodeIndex        = 3;   
    sdtmp.recordLen         = 12;
    sdtmp.fileNameLen       = 1;
    sdtmp.fileType          = 2;
    strcpy(sdtmp.fileName, ".");  
    sLoadDataBlock(21, 0, &sdtmp);

    sdtmp.fileNameLen       = 2;
    sdtmp.recordLen         = 12;      
    memset(sdtmp.fileName, 0, sizeof(sdtmp.fileName));
    strcpy(sdtmp.fileName, "..");
    sLoadDataBlock(21, 12, &sdtmp);

    sdtmp.inodeIndex        = 3;    // 第三个 inode
    sdtmp.fileNameLen       = 3;
    sdtmp.recordLen         = 1024-24;      
    memset(sdtmp.fileName, 0, sizeof(sdtmp.fileName));
    strcpy(sdtmp.fileName, "xrk");
    sLoadDataBlock(21, 24, &sdtmp);  
}
  • 函数比较简单,编译后运行,挂载到linux后,查看结果如下:
$ sudo mount -o loop disk /mnt
$ ls /mnt
xrk                         # 生成的文件
$ cat /mnt/xrk 
www.xrkxzz.cn               # 我们写入的内容
$ sudo umount /mnt
  • 成功了,一切符合预期。
阅读更多:   文件系统
暂无评论
  1. […] c 生成 ext2 文件 – 1 […]

添加新评论

icon_redface.gificon_idea.gificon_cool.gif2016kuk.gificon_mrgreen.gif2016shuai.gif2016tp.gif2016db.gif2016ch.gificon_razz.gif2016zj.gificon_sad.gificon_cry.gif2016zhh.gificon_question.gif2016jk.gif2016bs.gificon_lol.gif2016qiao.gificon_surprised.gif2016fendou.gif2016ll.gif