go-pipe - 課題

プロジェクト概要

go-pipe は、UNIX パイプを使用したプロセス間通信とコマンドのパイプライン実行を実装する課題です。pipex に相当する Go 版として、プロセス管理とファイルディスクリプタの操作を学びます。

提出ファイル

go-pipe/
├── go.mod
├── main.go           # メインエントリーポイント
├── pipe.go           # パイプ実装
├── exec.go           # コマンド実行
└── pipe_test.go      # テスト

マンダトリー要件

プログラムの動作

# 基本形式
./go-pipe file1 cmd1 cmd2 file2

# シェルの以下と等価
< file1 cmd1 | cmd2 > file2

実装する機能

  • 入力リダイレクト: 入力ファイルからの読み込み
  • 出力リダイレクト: 出力ファイルへの書き込み
  • パイプ接続: コマンド間のパイプ
  • コマンド実行: 外部コマンドの実行
  • 使用例

    # cat で読み込み、grep でフィルタ
    ./go-pipe input.txt "cat" "grep hello" output.txt
    
    # wc で行数カウント
    ./go-pipe input.txt "cat -e" "wc -l" output.txt
    

    ボーナス要件

  • 複数パイプのサポート(3つ以上のコマンド)
  • here_doc のサポート
  • コマンドの並列実行
  • 禁止事項

  • os/exec.Command().Output() の使用禁止(パイプを自分で作る)
  • 外部ライブラリの使用禁止