Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/colmiik/pipex
Replication of a bash-like pipe in C
https://github.com/colmiik/pipex
42school pipex
Last synced: about 1 month ago
JSON representation
Replication of a bash-like pipe in C
- Host: GitHub
- URL: https://github.com/colmiik/pipex
- Owner: ColmiiK
- Created: 2023-12-11T15:04:26.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2024-01-05T18:18:07.000Z (about 1 year ago)
- Last Synced: 2024-11-08T19:14:08.606Z (3 months ago)
- Topics: 42school, pipex
- Language: C
- Homepage:
- Size: 69.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
![]()
![]()
This project will let you discover in detail a UNIX mechanism that you already know
by using it in your program.
![]()
![]()
![]()
---
# Mandatory part
Program name
pipex
Turn in files
Makefile,*.h
,*.c
Makefile
NAME, all, clean, fclean, re
Arguments
file 1 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.
## Observations
Your program will be executed as follows:
``` bash
./pipex file1 cmd1 cmd2 file2
```
It must take 4 arguments:
- ``file1`` and ``file2`` are __file names__.
- ``cmd1`` and ``cmd2`` are __shell commands__ with their parameters.It must behave exactly the same as the shell command below:
``` bash
$> < file1 cmd1 | cmd2 > file2
```## Examples
``` bash
$> ./pipex infile "ls -l" "wc -l" outfile
```
Should behave like: ``< infile ls -l | wc -l > outfile``
``` bash
$> ./pipex infile "grep a1" "wc -w" outfile
```
Should behave like: ``< infile grep a1 | wc -w > outfile``## Requirements
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``
# Bonus partYou will get extra points if you:
- Handle multiple pipes.
This:
``` bash
$> ./pipex file1 cmd1 cmd2 cmd3 ... cmdn file2
```
Should behave like:
``` bash
< file1 cmd1 | cmd2 | cmd3 ... | cmdn > file2
```
- Support « and » when the first parameter is "here_doc".
This:
``` bash
$> ./pipex here_doc LIMITER cmd cmd1 file
```
Should behave like:
``` bash
cmd << LIMITER | cmd1 >> file
```