You will be writing a program that uses the system command line arguments to produce useful outputs. The majority of the code in this project should be dedicated to parsing command line in a robust way and then feeding those to a useful program. Some time will be spent configuring the system call string for ls and awk. You should use a Makefile to compile your code and be sure there are no errors by using -Wall and -Werror. The executable for this project will be called "lopt" This command will execute the ls function call using awk to select pieces of the output for display. Options -n n - line number to output, use 0 for all, 0 by default -g - display group id, off by default -o - display owner, off by default -p - display permissions, off by default -d - display date, off by default -f - display filename on by default By default, lopt will simply print a list of filenames. ./lopt -n 3 will print the third filename. - Remember this also really refers to the 4th line of ls -al because we ignore the first line completely ./lopt -fg -n 3 will printg the group id of the third file. ./lopt -ff should be considered a proper option and should be the same as -f ./lopt -fg-n 3 should produce a message that describes the syntax of ./lopt as -fg-n is not a proper option All options should be usable on lines by themselves or grouped together. For example: ./lopt -o -g and ./lopt -og and ./lopt -go should all produce the same output. The command: ./lopt -g o should not produce useful output, but rather should describe the valid outputs. -n may appear with others on its line for example the following valid command ./lopt -gon 3 is a valid command. The optional inputs are really just selectors from the ls -al list. Use the "system" function call and awk to produce an ls -al that has the lines requested above. Do not display the first line of ls -al. For example in a sample directory ls -al produces: total 40 drwxr-xr-x 4 sramsey2 staff 136 Sep 21 09:20 . drwxr-xr-x 12 sramsey2 staff 408 Sep 21 09:20 .. -rw-r--r-- 1 sramsey2 staff 760 Sep 20 22:18 hw1.cpp -rwxr-xr-x 1 sramsey2 staff 14664 Sep 21 09:20 lopt ./lopt produces . .. hw1.cpp lopt ./lopt -p produces drwxr-xr-x . drwxr-xr-x .. -rw-r--r-- hw1.cpp -rwxr-xr-x lopt ./lopt -po produces drwxr-xr-x sramsey2 . drwxr-xr-x sramsey2 .. -rw-r--r-- sramsey2 hw1.cpp -rwxr-xr-x sramsey2 lopt ./lopt -pog produces drwxr-xr-x sramsey2 staff . drwxr-xr-x sramsey2 staff .. -rw-r--r-- sramsey2 staff hw1.cpp -rwxr-xr-x sramsey2 staff lopt ./lopt -pogd produces drwxr-xr-x sramsey2 staff Sep 21 09:20 . drwxr-xr-x sramsey2 staff Sep 21 09:21 .. -rw-r--r-- sramsey2 staff Sep 20 22:18 hw1.cpp -rwxr-xr-x sramsey2 staff Sep 21 09:20 lopt ./lopt -pogdf produces drwxr-xr-x sramsey2 staff Sep 21 09:20 drwxr-xr-x sramsey2 staff Sep 21 09:21 -rw-r--r-- sramsey2 staff Sep 20 22:18 -rwxr-xr-x sramsey2 staff Sep 21 09:20 ./lopt -pogdfn 2 produces drwxr-xr-x sramsey2 staff Sep 21 09:21 ./lopt -p -o -g -dfn 2 produces the same output as the previous line. I've put tabs in between most fields, except the following: a space after permissions, and a space between the fields in the date. You can put tabs in an awk output command with "\t" but doing this in C++ presents a slight challenge as most of those characters are "escaped". To get "\t" as a string you would type: "\"\\t\"" To get spaces, you can use a comma , in awk output. Feel free to ask questions. This assignment is due on Sep 30