## Class child

hamigaki::process::child —

子プロセスを生成し、通信するためのクラス。

## Synopsis

    class child {
    public:
      // construct/copy/destruct
      child(const std::string&, const std::vector<std::string>&,
            const environment&, const context& = context());
      child(const std::string&, const std::vector<std::string>&,
            const context& = context());
      child(const std::string&, const environment&, const context& = context());
      child(const std::string&, const context& = context());
      ~child();

      // modifiers
      status wait();
      void terminate();

      // queries
      const char* get(const std::string&) const;
      pipe_sink stdin_sink();
      pipe_source stdout_source();
      pipe_source stderr_source();
    };

## Description

| Windowsにおける注意
Windows 2000/XP/2003では`child`クラスのコンストラクタを複数のスレッドから同時に呼び出した場合、意図しないハンドルが子プロセスに継承されることがある。(参考: PRB: Child Inherits Unintended Handles During CreateProcess Call) この問題はWindows Vistaで`CreateProcess()`関数に追加されたパラメータを適切に設定することで回避できる。`child`クラスはこれに対応しているため、Windows Vista以降のOSではこの問題は発生しない。

### `child` construct/copy/destruct

1.     child(const std::string& path, const std::vector<std::string>& args,
             const environment& env, const context& ctx = context());

   Effects: | パス`path`で示される実行ファイルを引数`args`、環境変数`env`で実行する。標準入出力と作業ディレクトリは`ctx`に従う。

2.     child(const std::string& path, const std::vector<std::string>& args,
             const context& ctx = context());

   Effects: | パス`path`で示される実行ファイルを引数`args`で実行する。標準入出力と作業ディレクトリは`ctx`に従う。
   Notes: | POSIX環境では、このコンストラクタの呼び出し中に環境変数を変更してはならない。

3.     child(const std::string& path, const environment& env,
             const context& ctx = context());

   Effects: | パス`path`で示される実行ファイルを環境変数`env`で実行する。標準入出力と作業ディレクトリは`ctx`に従う。

4.     child(const std::string& path, const context& ctx = context());

   Effects: | パス`path`で示される実行ファイルを実行する。標準入出力と作業ディレクトリは`ctx`に従う。
   Notes: | POSIX環境では、このコンストラクタの呼び出し中に環境変数を変更してはならない。

5.     ~child();

   Effects: | wait()を呼び出していない場合、子プロセスを強制終了させる。

### `child` modifiers

1.     status wait();

   Effects: | 子プロセスの終了を待ち、終了状態を返す

2.     void terminate();

   Effects: | 子プロセスを強制終了させる
   Notes: | この関数は子プロセスに終了を促すだけで、実際に終了するまで待つことはない。

### `child` queries

1.     const char* get(const std::string& name) const;

   Returns: | `name`のエントリがあればその値、なければ0

2.     pipe_sink stdin_sink();

   Returns: | 子プロセスの標準入力に接続されたパイプ

3.     pipe_source stdout_source();

   Returns: | 子プロセスの標準出力に接続されたパイプ

4.     pipe_source stderr_source();

   Returns: | 子プロセスの標準エラー出力に接続されたパイプ

| 製作著作 © 2007, 2008 Takeshi Mouri