简体   繁体   中英

Structs, pointers, and trees in C

For our final semester project, everyone in my Operating Systems class has been tasked with implementing a pseudo "linux filesystem". The idea is to simulate handling files, folders, changing directories, and so forth.

I dislike having to work with Strings and pointers when I program in C, and unfortunately for my peace-of-mind, this project looks to involve both. Because I am relatively uncomfortable with pointers, I was hoping I could get a sanity check that my backend implementation of the underlying tree structure is sound.

typedef struct floorNode
{
    char floorName[30]; //the name of the tree node
    struct floorNode *parentPointer; //this is a pointer to the parent node. Null for the root node.
    struct floorNode *childPointers[10]; //this is an array holding pointers to up to 10 child nodes. 
    char fileArray[10][30]; //this is an array of 10 'files', each of up to length 30.
                            //for this assignment, strings are the only type of "file"

} floorNode;

Is this the proper way to implement a tree in C?

That is more or less the proper data type.

I'm concerned about fileArray[][] . I don't think it is needed, unless I'm misunderstanding its purpose. To get floorName of the children, instead traverse childPointers[] to obtain the name in the children.

Something to consider if the nodes have 30 character strings is to make the storage for all of them a little bigger, 31 in this case, so that a trailing NUL is always present and no special yucky handling is needed to distinguish between a 30-character string without a NUL and all the shorter strings which have one.

You probably want a linked list of children. You definitely don't want arrays of pointers for this. You should also think about how to know if a file is actually a directory.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM