어제에 이어서 구현을 했습니다
에서 시작하여 clst체인에서 클러스터를 제거합니다. pclst체인의 바로 이전 클러스터여야 합니다. 즉, 이 함수 실행 후 pclst업데이트된 체인의 마지막 요소여야 합니다. clst체인의 첫 번째 요소인 경우 pclst0이어야 합니다.
void
fat_remove_chain (cluster_t clst, cluster_t pclst) {
/* TODO: Your code goes here. */
fat_put(pclst, EOChain);
cluster_t cur_clst = clst;
cluster_t next_clst;
while (true)
{
if (fat_get(cur_clst) == EOChain)
{
fat_put(cur_clst, 0);
break;
}
next_clst = fat_get(cur_clst);
fat_put(cur_clst, 0);
cur_clst = next_clst;
}
}
위의 코드는 ffat_remove_chain 함수입니다.
FAT 파일 시스템에서 클러스터 체인을 제거하는 역할을 합니다.
pclst의 FAT 엔트리 설정: pclst는 현재 클러스터(clst)의 이전 클러스터를 나타냅니다. 따라서 fat_put(pclst, EOChain)을 사용하여 pclst 위치의 FAT 엔트리 값을 연결 리스트의 끝(EOChain)으로 설정합니다. 이는 이전 클러스터(pclst)가 현재 클러스터(clst)를 다음 클러스터가 없음을 나타내도록 합니다.
클러스터 체인 제거: cur_clst 변수를 사용하여 현재 클러스터(clst)부터 시작하여 클러스터 체인을 순회합니다. while 루프를 사용하여 계속해서 다음 클러스터를 찾고 제거합니다.
현재 클러스터(cur_clst)의 FAT 엔트리 값을 확인합니다. 만약 해당 엔트리 값이 연결 리스트의 끝(EOChain)이라면, 현재 클러스터가 체인의 끝에 도달한 것을 의미합니다. 이 경우, fat_put(cur_clst, 0)을 사용하여 현재 클러스터의 FAT 엔트리를 0으로 설정하여 해당 클러스터를 사용하지 않는 상태로 만듭니다. 그 후 루프를 종료합니다.
현재 클러스터의 FAT 엔트리 값이 EOChain이 아닌 경우, 다음 클러스터를 next_clst 변수에 저장하고, fat_put(cur_clst, 0)를 사용하여 현재 클러스터의 FAT 엔트리를 0으로 설정합니다. 이는 현재 클러스터(cur_clst)를 사용하지 않는 상태로 만들어 제거하는 것을 의미합니다. 그 후, cur_clst를 next_clst로 업데이트하여 다음 클러스터로 이동합니다.
클러스터 체인 제거 완료: 최종적으로 클러스터 체인이 모두 제거되었습니다. 이 함수는 클러스터 체인을 제거하고 해당 클러스터들을 비어있는 상태로 설정합니다.
위의 코드는 파일 시스템에서 파일을 제거할 때 사용되며, 해당 파일이 차지하고 있는 클러스터 체인을 제거하여 파일 시스템의 공간을 반환합니다.
클러스터 번호가 가리키는 FAT 항목을 로 업데이트 clst합니다 val. FAT의 각 항목은 체인의 다음 클러스터(있는 경우, 그렇지 않은 경우 EOChain)를 가리키므로 연결을 업데이트하는 데 사용할 수 있습니다.
void fat_put(cluster_t clst, cluster_t val)
{
/* TODO: Your code goes here. */
fat_fs->fat[clst] = val;
}
위의 코드는 fat_put 함수입니다.
FAT 파일 시스템에서 특정 클러스터의 FAT 엔트리 값을 설정하는 역할을 합니다.
clst 위치의 FAT 엔트리 설정: clst는 특정 클러스터의 인덱스를 나타냅니다. val은 해당 클러스터의 FAT 엔트리에 설정할 값을 나타냅니다. fat_fs->fat 배열을 사용하여 파일 시스템의 FAT 테이블에 접근합니다.
FAT 엔트리 값 설정: fat_fs->fat[clst] = val을 사용하여 clst 위치의 FAT 엔트리 값을 val로 설정합니다. 이는 클러스터 체인을 형성하기 위해 다음 클러스터의 인덱스를 가리키거나, 빈 클러스터를 나타내는 값으로 설정됩니다.
위의 코드에서 fat_fs->fat은 FAT 파일 시스템의 FAT 테이블을 가리키는 포인터로 가정합니다. 이 함수를 사용하여 FAT 엔트리 값을 설정하면 클러스터 체인을 생성하거나 수정할 수 있습니다.
주어진 클러스터가 가리키는 클러스터 번호를 반환합니다 clst.
cluster_t
fat_get(cluster_t clst)
{
/* TODO: Your code goes here. */
return fat_fs->fat[clst];
}
위의 코드는 fat_get 함수입니다.
FAT 파일 시스템에서 특정 클러스터의 FAT 엔트리 값을 반환하는 역할을 합니다.
clst 위치의 FAT 엔트리 값 반환: clst는 특정 클러스터의 인덱스를 나타냅니다. fat_fs->fat 배열을 사용하여 파일 시스템의 FAT 테이블에 접근합니다.
FAT 엔트리 값 반환: fat_fs->fat[clst]를 사용하여 clst 위치의 FAT 엔트리 값을 반환합니다. 이 값은 다음 클러스터의 인덱스를 가리키거나, 빈 클러스터를 나타내는 값입니다.
위의 코드에서 fat_fs->fat은 FAT 파일 시스템의 FAT 테이블을 가리키는 포인터로 가정합니다. 이 함수를 사용하여 특정 클러스터의 FAT 엔트리 값을 얻을 수 있습니다. 이는 클러스터 체인을 따라 파일의 데이터를 읽거나 쓰는 데 사용될 수 있습니다.
클러스터 번호를 clst해당 섹터 번호로 변환하고 섹터 번호를 반환합니다.
disk_sector_t
cluster_to_sector(cluster_t clst)
{
/* TODO: Your code goes here. */
return fat_fs->data_start + clst;
}
위의 코드는 cluster_to_sector 함수입니다.
FAT 파일 시스템에서 클러스터 번호를 물리적인 디스크 섹터 번호로 변환하는 역할을 합니다.
클러스터 번호를 물리적인 디스크 섹터 번호로 변환: clst는 특정 클러스터의 인덱스를 나타냅니다. fat_fs->data_start는 데이터 영역의 시작 위치를 나타냅니다. 클러스터 번호에 데이터 영역의 시작 위치를 더하여 물리적인 디스크 섹터 번호를 계산합니다.
디스크 섹터 번호 반환: 계산된 디스크 섹터 번호인 fat_fs->data_start + clst를 반환합니다. 이는 클러스터의 데이터가 저장된 물리적인 디스크의 위치를 가리킵니다.
위의 코드에서 fat_fs->data_start는 FAT 파일 시스템의 데이터 영역의 시작 위치를 가리키는 값으로 가정합니다. 이 함수를 사용하여 클러스터 번호를 물리적인 디스크 섹터 번호로 변환할 수 있습니다. 이는 파일의 데이터를 읽거나 쓰는 데 사용될 수 있습니다.