From cfab729421e949c5cedb580cbf362f377134cca0 Mon Sep 17 00:00:00 2001 From: Vadim Tolmachev Date: Fri, 15 Oct 2021 01:42:07 +0300 Subject: [PATCH] add *.md --- README.md | 34 ++++++++++++++++++++++++++++++++++ README.ru.md | 33 +++++++++++++++++++++++++++++++++ img/125.png | Bin 0 -> 6284 bytes img/eng.png | Bin 0 -> 14555 bytes img/ru.png | Bin 0 -> 8133 bytes 5 files changed, 67 insertions(+) create mode 100644 README.md create mode 100644 README.ru.md create mode 100644 img/125.png create mode 100644 img/eng.png create mode 100644 img/ru.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..340208e --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +![eng](img/eng.png) [![ru](img/ru.png)](README.ru.md) +# `pipex` + +The purpose of this project is the discovery in detail UNIX mechanism - `pipe`. +You can read task: [`pipex.subject.pdf`](subject/pipex.subject.pdf) + + +### Discription of mandatory part +The program `pipex` should repeat the behaviour of the next shell command +```bash +$> < file1 cmd1 | cmd2 > file2 +``` +and looks like this: +```bash +$> ./pipex file1 cmd1 cmd2 file2 +``` +All errors like: wrong commands, permission to files and etc, need be handle. +### Discription of bonus part +Program need handle multiple pipes +```bash +$> < file1 cmd1 | cmd2 | cmd3 | ... | cmdn > file2 + +$> ./pipex file1 cmd1 cmd2 cmd3 ... cmdn file2 +``` +Support `<<` and `>>`, when instead of `file1` is`here_doc`. +```bash +$> cmd1 << LIMITER | cmd2 >> file2 + +$> ./pipex here_doc LIMITER cmd1 cmd2 file2 +``` + +### Evaluated by moulinette + +![125/100](img/125.png) diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 0000000..1469861 --- /dev/null +++ b/README.ru.md @@ -0,0 +1,33 @@ +[![eng](img/eng.png)](README.md) ![ru](img/ru.png) +# `pipex` + +Цель данного проекта детальное рассмотрение UNIX механизма `pipe`. +Задание можно прочитать здесь: [`pipex.subject.pdf`](subject/pipex.subject.pdf) + +### Описание основной части +Программа `pipex` должна повторять поведение следующей команды оболочки +```bash +$> < file1 cmd1 | cmd2 > file2 +``` +и выглядеть следующим образом: +```bash +$> ./pipex file1 cmd1 cmd2 file2 +``` +Необходимо обрабатывать все ошибки, такие как: неправильные команды, отсутствие необходимых прав у файлов и т.д. +### Описание бонусной части +Программа должна обрабатывать несколько пайпов. +```bash +$> < file1 cmd1 | cmd2 | cmd3 | ... | cmdn > file2 + +$> ./pipex file1 cmd1 cmd2 cmd3 ... cmdn file2 +``` +Поддерживать `<<` и `>>`, когда вместо `file1` передается`here_doc`. +```bash +$> cmd1 << LIMITER | cmd2 >> file2 + +$> ./pipex here_doc LIMITER cmd1 cmd2 file2 +``` + +### Оценка от moulinette + +![125/100](img/125.png) diff --git a/img/125.png b/img/125.png new file mode 100644 index 0000000000000000000000000000000000000000..c61b27338c66e737c95f0158524246412dbdc8b8 GIT binary patch literal 6284 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 bD~RkCC$0OSvh`z98la}6rC9#PBJ95a8f6n9 literal 0 HcmV?d00001 diff --git a/img/eng.png b/img/eng.png new file mode 100644 index 0000000000000000000000000000000000000000..272609aa0ab634b2c7612ebda16121064d29dae4 GIT binary patch literal 14555 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 literal 0 HcmV?d00001