所以我试图实现一个UNIX文件系统并遇到一些麻烦,因为我之前没有使用过很多结构。我对编程很新。这就是我现在所拥有的:
typedef struct Unix{
char *name;
struct Unix *parentDirectory;
struct Unix **subDirectories;
} FileSystem;
我在一个名为Unix.c的单独文件中有这个,它通过标头传递到我的main.c文件中。 parentDirectory将是指向父目录的指针,subDirectories将指向所有子目录。
我的问题是如何访问主文件中的目录和子目录。我的另一个问题如下:假设我创建了以下内容:/home/TestUser/Desktop/StephCurry/WithTheShot
。如果我删除目录StephCurry,我将如何更改该目录上的所有其他父/子目录结构?我相信这与数据结构有关,但我并不是百分之百确定。
谢谢你们。我真的很喜欢进入编程,这很有趣!我在实施其中一些方面遇到了一些麻烦。
答案 0 :(得分:0)
我的问题是如何访问目录和子目录 在我的主文件中。
// example: print given directory and all subdirectories recursively
void prdirr(FileSystem *dir)
{
puts(dir->name);
FileSystem **subdirp = dir->subDirectories;
if (subdirp)
for (; *subdirp; ++subdirp)
prdirr(*subdirp);
}
...
FileSystem root = { "", NULL, calloc(1, sizeof (FileSystem *)) };
...
prdirr(&root);
我的另一个问题是:让我们说我有 创建后:
/home/TestUser/Desktop/StephCurry/WithTheShot
。如果我 删除目录StephCurry,我将如何更改所有其他目录 父/子目录结构在该目录之上?
您不必更改所有其他父/子目录结构 - 您只需从其父级StephCurry
中删除目录subDirectories
Desktop
(以及free
已删除的结构,如果它们已被malloc
编辑,当然)。我们假设dir
指向节点StephCurry
:
// free memory of given directory and all subdirectories recursively
void dedirr(FileSystem *dir)
{
FileSystem **subdirp = dir->subDirectories;
if (subdirp)
for (; *subdirp; ++subdirp)
dedirr(*subdirp), free(*subdirp); // free the node
free(dir->subDirectories); // free the list
}
...
// remove dir from parent's list of subDirectories
if (dir->parentDirectory) // won't remove root
{
FileSystem **subl, **subr;
subl = subr = dir->parentDirectory->subDirectories;
do if (*subr == dir) ++subr; while (*subl++ = *subr++);
dedirr(dir); // free memory of deleted dir tree
}