文件系统函数详解:void create_file(char filename[], int length) - 创建文件

本文将深入解析文件系统中的核心函数 create_file,该函数用于创建一个指定长度的文件。

void create_file(char filename[], int length) /* 创建文件 */
{
 int i, j;
 
 // 循环64次,查找是否有同名文件
 for (i = 0; i < 64; i++)
 {
  if (strcmp(filename, c[i].file_name) == 0)    // 如果找到同名文件
  {
   printf('文件已经存在,不允许建立重名的文件\n');    // 输出错误信息
   return;    // 返回
  }
 }
 
 // 循环64次,查找空闲的目录项
 for (i = 0; i < 64; i++)
 {
  if (c[i].i_num == -1)    // 如果找到空闲的目录项
  {
   c[i].i_num = i;    // 将目录项的i节点号设置为i
   strcpy(c[i].file_name, filename);    // 将文件名写入目录项
   strcpy(c[i].dir_name, cur_dir);    // 将当前目录名写入目录项
   i_node[i].file_style = style;    // 将文件类型写入i节点
   i_node[i].file_length = length;    // 将文件长度写入i节点
   allot(length);    // 分配盘块
   
   // 循环length次,将盘块号写入i节点
   for (j = 0; j < length; j++)
   {
    i_node[i].file_address[j] = physic[j];
   }
   break;    // 跳出循环
  }
 }
}

代码解析:

  1. 文件名查重:

    • 代码首先循环遍历目录项数组 c,比较文件名 filename 与每个目录项中存储的文件名 c[i].file_name 是否相同。
    • 如果发现同名文件,则输出错误信息并返回,阻止创建重名文件。
  2. 查找空闲目录项:

    • 循环遍历目录项数组 c,寻找 i_num 属性为 -1 的空闲目录项。
  3. 写入文件信息:

    • 找到空闲目录项后,将文件信息写入目录项和 i 节点:
    • c[i].i_num: 设置目录项的 i 节点号
    • c[i].file_name: 存储文件名
    • c[i].dir_name: 存储当前目录名
    • i_node[i].file_style: 设置文件类型
    • i_node[i].file_length: 设置文件长度
  4. 分配磁盘空间:

    • 调用 allot(length) 函数分配指定长度的磁盘空间。
  5. 更新 i 节点:

    • 将分配到的磁盘块号依次写入 i 节点的 file_address 数组中,记录文件的存储位置。

关于循环64次:

代码中出现两次循环64次的场景,这是因为该文件系统的设计设定最多只能容纳64个文件或目录。因此,在查找空闲目录项或同名文件时,只需要循环64次即可覆盖所有可能的情况。

总结:

create_file 函数是文件系统中创建文件的基础函数,它包含了文件名查重、空闲目录项查找、文件信息写入、磁盘空间分配等关键步骤,对于理解文件系统的底层运作机制至关重要。

文件系统函数详解:void create_file(char filename[], int length)

原文地址: https://www.cveoy.top/t/topic/f2rZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录