This project will let you discover in detail a UNIX mechanism that you already know by using it in your program.
Key | Value |
---|---|
Program name | pipex |
Turn in files | Makefile , *.h , *.c |
Makefile | NAME , all , clean , fclean , re |
Arguments | file1 cmd1 cmd2 file2 |
External functions | - open , close , read , write , malloc , free , perror , strerror , access , dup , dup2 , execve , exit , fork , pipe , unlink , wait , waitpid - ft_printf and any equivalent YOU coded |
Libft authorized | Yes |
Description | This project is about handling pipes. |
Your program will be executed as follows:
./pipex file1 cmd1 cmd2 file2
It must take 4 arguments:
file1
andfile2
are file names.cmd1
andcmd2
are shell commands with their parameters.
It must behave exactly the same as the shell command below:
$> < file1 cmd1 | cmd2 > file2
$> ./pipex infile "ls -l" "wc -l" outfile
Should behave like: < infile ls -l | wc -l > outfile
$> ./pipex infile "grep a1" "wc -w" outfile
Should behave like: < infile grep a1 | wc -w > outfile
Your project must comply with the following rules:
- You have to turn in a
Makefile
which will compile your source files. It must not relink. - You have to handle errors thoroughly. In no way your program should quit unexpectedly (segmentation fault, bus error, double free, and so forth).
- Your program mustn't have memory leaks.
- If you have any doubt, handle the errors like the shell command:
< file1 cmd1 | cmd2 > file2
You will get extra points if you:
-
Handle multiple pipes.
This:
$> ./pipex file1 cmd1 cmd2 cmd3 ... cmdn file2
Should behave like:
< file1 cmd1 | cmd2 | cmd3 ... | cmdn > file2
-
Support
<<
and>>
when the first parameter ishere_doc
.This:
$> ./pipex here_doc LIMITER cmd cmd1 file
Should behave like:
cmd << LIMITER | cmd1 >> file