Process

launch_detached()

プロセスを親から切り離した状態(デタッチ)で起動するlaunch_detached()を実装しました。 差分 使い方はこんな感じで一発関数を呼ぶだけです。 #include <hamigaki/process/child.hpp> namespace proc = hamigaki::process; int main() { // メモ帳を起動、終了は待たない proc::launch_d</hamigaki/process/child.hpp>…

redirect_stream_to_stdout()

標準エラー出力から標準出力へのリダイレクトを実装しました。 差分 よく使うであろうパターンはこうなります。 context ctx; // 標準入力と標準出力をパイプで捕捉 ctx.stdin_behavior(capture_stream()); ctx.stdout_behavior(capture_stream()); // 標準…

bjam_win その4

bjam_winにツールセットを選択するためのコンボボックスを追加しました。 今日の差分 とりあえずツールセットは、 msvc-8.0 msvc-7.1 gcc-mingw-3.4.2 の三つに固定されています。 コンボボックスはrebarの上に置いているんですが、rebarは扱いが面倒ですね…

bjam_win その3

今日はあまり進みませんでした。 UI周りの微調整だけです。 今日の差分 Jamfile.2のパスをタイトルバーに表示するようにした ファイルのドラッグ&ドロップに対応した コマンドラインでファイル名を指定できるようにした bjamの起動オプションを変更できるよ…

bjam_win その2

bjamのGUIも少し改良しました。 ログのリストボックスに水平スクロールバーを追加 プロセスの起動状態とメニュー項目のオン/オフを同期させるようにした 今日の成果物 まだ、コマンドプロンプトで実行するのと大差ないです。

shell_expand

昨日作ったlaunch_shell()のラッパーとして、シェルのコマンド展開のような働きをする関数を追加しました。 実装はこんな感じです。 std::string shell_expand(const std::string& cmd) { // 標準出力のみパイプで受け取る context ctx; ctx.stdout_behavior…

launch_shell

今日は昨日のbjam_winの実装で気付いた点をいろいろ修正しました。 Boost.Processに合わせてipc_mapをcontextに改名 作業ディレクトリを設定するcontext::work_directory()を追加 ライブラリのオートリンクに対応 子プロセスの実行時にコマンドプロンプトが…

bjam_win

Hamigaki.Processを使って、bjamのGUIフロントエンドを作成中です。 またもやGoogle SoC 2007とネタがかぶってますが、気にしてはいけません。 目標は、 test-suiteルールに含まれるテストを選択的に実行する exeルールで作成した実行ファイル(ディレクトリ…

ファイル記述子の継承とマルチスレッド

今日は昨日の話のPOSIX版です。 Windowsのハンドルに対応する概念はPOSIXではファイル記述子です。 ファイル記述子もハンドルと同じく子プロセスに継承させることができます。(というかWindowsの方がマネしているんでしょうが。) 面倒なことに、ファイル記述…

ハンドルの継承とマルチスレッド

今日は子プロセス問題のWindows版についてです。 Windowsで子プロセスと標準入出力を使って通信するためには、通常、 親プロセスが無名パイプを作成する パイプの一端のハンドルを「継承可能」にする STARTUPINFO構造体のhStdInput等に継承可能にしたパイプ…

Hamigaki.Process for POSIX

POSIX用の実装もとりあえずできました。 POSIX用差分 execve()したsortが上手く動かないと思ったら、argvの終端をNULLポインタでなく、空文字列("")にしていました。 その他の修正 child::wait()の戻り値用にstatusクラスを作った chileのデストラクタで(ま…

Hamigaki.Process

Windows版のHamigaki.Processを作りました。 今日の成果物 とりあえず必要最低限の機能だけです。 機能の例はおおよそこうなります。 #include <hamigaki/process/child.hpp> #include <iostream> namespace proc = hamigaki::process; int main() { try { proc::ipc_map ipc; ipc.stdin_behavior(p</iostream></hamigaki/process/child.hpp>…

Boost.Processを試す

ふと新たなアプリのネタを思いついたのですが、それで子プロセスと通信する必要があったので、Boost.Processを試してみました。 以下のコードは、Boost Vaultにアップされているバージョンではなく、SoCのSVNリポジトリの最新trunkバージョンです。 #include <boost/process.hpp></boost/process.hpp>…