PS-1: Do command
Your task is to implement a C++ program that accepts a command name and command arguments with command-line arguments and executes it in a new process.
Description
Your task is to implement a C++ program that accepts a command name and command arguments with command-line arguments and executes it in a new process.
Requirements
- Write a C++ program called "do-command" that takes N arguments as an input.
- Assume that first argument is command name and others are arguments for the given command.
- A program should contain a special function do_command(char** argv), where argv is null-terminated vector of arguments.
- The function "do_command" should create a new process, execute the given command with the given arguments and wait for its completion.
- After program execution is done, do_command should print exit status of the command and the duration of the command execution.
- The "main" function of the program is responsible for building proper argument vector and using do_command function to execute the command.
Expected result
The resulting application should be able to build and execute from command line as follows:
make
./do-command ls -alThe command is expected to print program output to the console and a line as follows:
drwxr-xr-x 8 user user 256 Oct 21 15:45 .
drwxr-xr-x 3 user user 96 Oct 16 16:45 ..
drwxr-xr-x 15 user user 480 Nov 9 23:53 .git
-rw-r--r-- 1 user user 591 Oct 16 16:45 .gitignore
-rw-r--r--@ 1 user user 11357 Oct 21 15:45 LICENSE
-rw-r--r-- 1 user user 18 Oct 16 16:45 README.md
drwxr-xr-x 17 user user 544 Oct 21 15:45 docs
drwxr-xr-x 16 user user 512 Oct 16 16:45 samples
Command completed with X exit code and took Y seconds.The final solution should contain a Makefile for the multi-stage build. The Makefile should also contain targets all and clean. It's recommended to have compiler and compiler flags declared as Makefile variables. Alternatively, cmake could also be used instead of make.
FS-10: Copy a file with holes
Copy a file in C++ on Linux while preserving its holes (sparse regions), overwriting the destination and reporting data and hole byte counts.
PS-2: Interactive shell
Build an interactive C++ shell that spawns a process per command, adds the current directory to PATH, and redirects 'silent' commands to a PID.log file.