$39
Objectives
To add additional features to the search program implemented in Project #2.
Description
The goal of this project is to add additional functionality to the search program implemented in Project #2. In addition to the functionality described in Project #2, the program must support the following command-line options:
1. -e "<unix-command with arguments>"
For each file that matches the search criteria the UNIX command specified with arguments must be executed.
2. -E "<unix-command with arguments>" [Graduate Students Only]
The list of files that matches the search criteria must be provided as an argument to the UNIX command specified.
Note that with the -e option the UNIX command is executed for each file whereas with the -E option the UNIX command is executed only once but uses all the file names as the argument. You must use fork/exec/wait to create a new process to execute the UNIX command.
The UNIX command and any optional arguments are enclosed within double quotes. The program should support -e or -E options in combination with -s and -f options. You can assume that the -e or -E options appear after the -s and -f options.
Guidelines and Hints
1. You should use a Makefile to compile and build this project and make sure to submit the Makefile along with the rest of the source code.
2. You should upload all the source code, Makefile, and a README.txt file to Canvas. Please do not upload any object files or executable files.
Program Documentation and Testing
1. Use appropriate names for variables and functions.
2. Use a Makefile to compile your program.
3. Include meaningful comments to indicate various operations performed by the program.
4. Programs must include the following header information within comments:
/*
Name:
BlazerId:
Project #:
To compile: <instructions for compiling the program>
To run: <instructions to run the program> */
4. Test your program with the sample test cases provided as well as your own test cases.
5. You can include any comments you may have about testing in the README.txt file.
Examples
Command Description
$./search -s 1024 -e "ls -l"
$./search -f jpg 3 -E "tar cvf jpg.tar"
$./search -s 1024 -f jpg 3 -e "wc -l"
List all files with size <= 1024 bytes in the current directory, and execute the command "ls -l" on each file (ignore directories)
List all files that have the substring “jpg” in their filename or directory name with depth <=3 relative to the current directory, and creates a tar file named jpg.tar that contains these files
List all files that have the substring “jpg” in their filename with depth <=3 relative to the current directory and size <= 1024, and execute the command "wc -l" on each file (ignore directories)
Sample Input and Output:
If you have the following directory structure as shown by the output of "ls -lR"
command:
$ ls -R projects
projects:
fread.c fwrite.c project1 project2 project3 project4 read.c write.c
projects/project1:
project1.docx README
projects/project2:
project2.docx README
projects/project3:
project3.docx README
projects/project4:
project4.docx README
Then the output of find without any argument should look like this:
projects
fread.c
fwrite.c
project1
README
project1.docx
project2
project2.docx
README
project3
project3.docx
README
project4
project4.docx
README
read.c
write.c
It is not necessary that the order of the files are exactly as shown above, but the overall structure should look similar to the output shown above. You can use the following tar file to create the directory structure: projects.tar. Download this file and extract the file using the command:
$ tar xvf projects.tar
Submission Guidelines
Upload the C source code, PDF version of C source code, and README.txt file to Canvas. Do not include any executable or object files.
Use the following command to create PDFs of your source code.(replace
the <Source_code_File_name> and <Output_Source_code_File_name> with your C source code file name):
$enscript <Source_code_File_Name>.c -o - | ps2pdf - <Output_Source_code_File_ Name>.pdf
• Use best software engineering practices to design and implement this Project.
• Use functions and organize these functions in multiple files if necessary.
• Use a Makefile to compile and build the multiple files.
• Document you code and include instructions for compiling and executing the program in the README.txt file.
Grading Rubrics
Description
Implementation of parsing the arguments to the search program correctly and invoking the appropriate function
Implementation of search that executes the UNIX command with optional arguments for each matching file using fork/exec/wait
Implementation of search that lists the files and directories in the specified format when executed with multiple options (combination of -s, -f and -e)
Use of Makefile, source code documentation (including README.txt file)
Points
20
points
50
points
20
points
10
points