System Programming - Programming Assignment
Topics: Low-Level Files in C.
For this assignment, you need only write a single-file C program.
Your program will:
- Obtain the following (in order) from the command line:
- A mode argument:
- -c create a new archive file
- -cr create recursive a new archive file
- -e explode an existing archive file
- A path argument:
- Specifies the directory (as either a relative path to the current working directory or an absolute path) that contains the files to be archived ( -c -cr ) or to serve as the root of the exploded archive ( -e )
- A file argument:
- Specifies the name of the archive file that is to be created / or added to. Note: by default this file will be in the current working directory, however by pre-pending a path this file can/could be anywhere you wish.
- Based on the command line arguments does one of the following:
- Create: Create a new archive file ( file ) that, for each regular (non-hidden) file in the directory specified by ( path ), contains the data required to restore the file's:
- Name
- Data
- Access Permissions
- Create Recursive: same as Create, but you also recurse into each sub-directory
(Note: Do Not recurse into . or .. )
- Explode: Create a regular file in the directory specified by ( path ), for each archived file in the archive file ( file ), such that it has the same name, access permission and is an exact copy of the original file that was archived.
- If you are looking for more fun ... consider (any combination of):
- Encrypt the files as you write them into the archive
- Compress the files as you write them into the archive
- Proper care (error reporting / program termination) when opening, creating, files and directories is required.
Sample Runs:
% ./archive -c . my_archive
archiving .
Done - my_archive as been created
% ./archive -cr ./classes my_archive
archiving ./classes
archiving ./classes/CS351
archiving ./classes/CS351/Progs
archiving ./classes/CS317
Done - my_archive as been created
% ./archive -e ./explode_test my_archive
exploding to ./explode_test
Done - my_archive as been exploded