| Cutterリファレンスマニュアル | ||||
|---|---|---|---|---|
| Top | 説明 | オブジェクト階層 | プロパティ | シグナル | ||||
#define GCUT_PROCESS_ERROR GCutProcess; GCutProcessClass; enum GCutProcessError; GQuark gcut_process_error_quark (void); GCutProcess * gcut_process_new (const gchar *command,...); GCutProcess * gcut_process_new_command_line (const gchar *command_line); GCutProcess * gcut_process_new_va_list (const gchar *command,va_list args); GCutProcess * gcut_process_new_argv (gint argc,gchar **argv); GCutProcess * gcut_process_new_strings (const gchar **command); GCutProcess * gcut_process_new_array (GArray *command); void gcut_process_set_flags (GCutProcess *process,GSpawnFlags flags); GSpawnFlags gcut_process_get_flags (GCutProcess *process); void gcut_process_set_env (GCutProcess *process,const gchar *name,...); gchar ** gcut_process_get_env (GCutProcess *process); gboolean gcut_process_run (GCutProcess *process,GError **error); GPid gcut_process_get_pid (GCutProcess *process); gint gcut_process_wait (GCutProcess *process,guint timeout,GError **error); gboolean gcut_process_kill (GCutProcess *process,gint signal_number,GError **error); gboolean gcut_process_write (GCutProcess *process,const gchar *chunk,gsize size,GError **error); GIOStatus gcut_process_flush (GCutProcess *process,GError **error); GString * gcut_process_get_output_string (GCutProcess *process); GString * gcut_process_get_error_string (GCutProcess *process); GIOChannel * gcut_process_get_input_channel (GCutProcess *process); GIOChannel * gcut_process_get_output_channel (GCutProcess *process); GIOChannel * gcut_process_get_error_channel (GCutProcess *process); GInputStream * gcut_process_get_output_stream (GCutProcess *process); GInputStream * gcut_process_get_error_stream (GCutProcess *process); guint gcut_process_get_forced_termination_wait_time (GCutProcess *process); void gcut_process_set_forced_termination_wait_time (GCutProcess *process,guint timeout); GCutEventLoop * gcut_process_get_event_loop (GCutProcess *process); void gcut_process_set_event_loop (GCutProcess *process,GCutEventLoop *loop);
"error" : Run Last "error-received" : Run Last "output-received" : Run Last "reaped" : Run Last
GCutProcessは外部コマンドの実行・通信・終了をカプセル化します。GCutProcessはエラーをGErrorとして報告します。エラーはgcut_assert_error()を使うことにより簡単に検証できます。
外部コマンドはgcut_process_new()、gcut_process_new_strings()などのようなコンストラクタで指定します。この時点では外部コマンドは実行されません。gcut_process_hatch()で指定された外部コマンドが実行されます。
外部コマンドの標準出力・エラー出力は"output-received"シグナル・"error-received"シグナル、あるいは、gcut_process_get_output()・gcut_process_get_error()が返すGIOChannelで取得できます。gcut_process_write()は外部コマンドの標準入力にデータを書き込みます。
外部コマンドの終了を待つためにはgcut_process_wait()を使うことができます。無限待ちを避けるために、タイムアウトを指定することができます。
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
static GString *output_string; static GCutProcess *process; void cut_setup (void) { output_string = g_string_new(NULL); process = NULL; } void cut_teardown (void) { if (output_string) g_string_free(output_string, TRUE); if (process) g_object_unref(process); } static void cb_output_received (GCutProcess *process, const gchar *chunk, gsize size, gpointer user_data) { g_string_append_len(output_string, chunk, size); } void test_echo (void) { GError *error = NULL; process = gcut_process_new("echo", "XXX", NULL); g_signal_connect(process, "receive-output", G_CALLBACK(cb_output_received), NULL); gcut_process_run(process, &error); gcut_assert_error(error); gcut_process_wait(process, 1000, &error); gcut_assert_error(error); cut_assert_equal_string("XXX\n", output_string->str); } |
typedef struct {
GObjectClass parent_class;
void (*output_received) (GCutProcess *process,
const gchar *chunk,
gsize size);
void (*error_received) (GCutProcess *process,
const gchar *chunk,
gsize size);
void (*reaped) (GCutProcess *process,
gint status);
void (*error) (GCutProcess *process,
GError *error);
} GCutProcessClass;
typedef enum
{
GCUT_PROCESS_ERROR_COMMAND_LINE,
GCUT_PROCESS_ERROR_IO_ERROR,
GCUT_PROCESS_ERROR_ALREADY_RUNNING,
GCUT_PROCESS_ERROR_NOT_RUNNING,
GCUT_PROCESS_ERROR_INVALID_OBJECT,
GCUT_PROCESS_ERROR_INVALID_SIGNAL,
GCUT_PROCESS_ERROR_PERMISSION_DENIED,
GCUT_PROCESS_ERROR_TIMEOUT
} GCutProcessError;
GCutProcess関連の操作で返されるエラーコード。
| コマンドライン関連のエラー。 | |
| 入出力エラー。 | |
| 外部コマンドはすでに実行されています。 | |
| 外部こもアンドが実行されていません。 | |
| 不正なGCutProcessオブジェクトが渡されました。 | |
| 不正なシグナルが渡されました。 | |
| 許可がありません。 | |
| タイムアウト。 |
1.1.5から
GCutProcess * gcut_process_new (const gchar *command,...);
commandを実行する新しいGCutProcessオブジェクトを生成します。
|
実行する外部コマンド名。 |
|
commandの引数 |
戻り値 : |
GCutProcessオブジェクト。 |
1.1.5から
GCutProcess * gcut_process_new_command_line (const gchar *command_line);
command_lineを実行する新しいGCutProcessオブジェクトを生成します。
|
コマンドライン |
戻り値 : |
GCutProcessオブジェクト。 |
1.1.5から
GCutProcess * gcut_process_new_va_list (const gchar *command,va_list args);
commandを実行する新しいGCutProcessオブジェクトを生成します。
|
実行する外部コマンド名。 |
|
commandの引数 |
戻り値 : |
GCutProcessオブジェクト。 |
1.1.5から
GCutProcess * gcut_process_new_argv (gint argc,gchar **argv);
commandを実行する新しいGCutProcessオブジェクトを生成します。
|
argvの要素数 |
|
実行する外部コマンド名とコマンド引数。 |
戻り値 : |
GCutProcessオブジェクト。 |
1.1.5から
GCutProcess * gcut_process_new_strings (const gchar **command);
commandを実行する新しいGCutProcessオブジェクトを生成します。
|
実行する外部コマンド名とコマンド引数。NULL終端。 |
戻り値 : |
GCutProcessオブジェクト。 |
1.1.5から
GCutProcess * gcut_process_new_array (GArray *command);
commandを実行する新しいGCutProcessオブジェクトを生成します。
|
実行する外部コマンド名とコマンド引数。GArrayは0終端にして下さい。 |
戻り値 : |
GCutProcessオブジェクト。 |
1.1.5から
void gcut_process_set_flags (GCutProcess *process,GSpawnFlags flags);
外部コマンドを実行するときのflagsを設定します。
|
GCutProcess |
|
g_spawn_async_with_pipes()に渡すフラグ。 |
1.1.5から
GSpawnFlags gcut_process_get_flags (GCutProcess *process);
外部コマンドを実行する時のflagsを取得します。
|
GCutProcess |
戻り値 : |
外部コマンドを実行するときのフラグ。 |
1.1.5から
void gcut_process_set_env (GCutProcess *process,const gchar *name,...);
外部コマンドの環境変数を設定します。
|
GCutProcess |
|
最初の環境変数名。 |
|
nameに対応する値。その後に、名前と値のペアを任意の数だけ指定します。最後の引数はNULLにしてください。 |
1.1.5から
gchar ** gcut_process_get_env (GCutProcess *process);
外部コマンドの環境変数を取得します。
|
GCutProcess |
戻り値 : |
新しく割り当てられたNULL終端の環境変数のリスト("名前1=値1", "名前2=値2", ..., NULL)を返します。必要がなくなったらg_strfreev()で開放してください。 |
1.1.5から
gboolean gcut_process_run (GCutProcess *process,GError **error);
新しい外部プロセスを実行します。
|
GCutProcess |
|
エラーを返すアドレスまたはNULL。 |
戻り値 : |
成功したときはTRUE、そうでない場合はFALSE。 |
1.1.5から
GPid gcut_process_get_pid (GCutProcess *process);
実行している外部プロセスのプロセスIDを取得します。外部コマンドが実行されていない場合は0が返ります。
|
GCutProcess |
戻り値 : |
実行中の外部コマンドのプロセスID。実行していない場合は0。 |
1.1.5から
gint gcut_process_wait (GCutProcess *process,guint timeout,GError **error);
実行中の外部プロセスが終了することをtimeoutミリ秒待ちます。外部コマンドがtimeoutミリ秒以内に終了しなかった場合は、GCUT_PROCESS_ERROR_TIMEOUTエラーが設定され、-1が返ります。外部プロセスが実行されていない場合は、GCUT_PROCESS_ERROR_NOT_RUNNINGエラーが設定され、-1が返ります。
|
GCutProcess |
|
タイムアウト時間(ミリ秒) |
|
エラーを返すアドレスまたはNULL。 |
戻り値 : |
外部プロセスが終了した場合は終了ステータス。そうでない場合は-1。 |
1.1.5から
gboolean gcut_process_kill (GCutProcess *process,gint signal_number,GError **error);
外部プロセスにsignal_numberシグナルを送ります。
|
GCutProcess |
|
外部プロセスに送るシグナル番号。 |
|
エラーを返すアドレスまたはNULL。 |
戻り値 : |
成功したときはTRUE、そうでない場合はFALSE。 |
1.1.5から
gboolean gcut_process_write (GCutProcess *process,const gchar *chunk,gsize size,GError **error);
外部プロセスの標準入力にchunkを書き込みます。
|
GCutProcess |
|
書き込むデータ |
|
chunkのサイズ |
|
エラーを返すアドレスまたはNULL。 |
戻り値 : |
成功したときはTRUE、そうでない場合はFALSE。 |
1.1.5から
GIOStatus gcut_process_flush (GCutProcess *process,GError **error);
外部プロセスの標準出力から読み込んだデータ。
|
GCutProcess |
|
エラーを返すアドレスまたはNULL。 |
戻り値 : |
the status of the operation: One of
G_IO_STATUS_NORMAL, G_IO_STATUS_AGAIN, or
G_IO_STATUS_ERROR.
|
1.1.5から
GString * gcut_process_get_output_string (GCutProcess *process);
|
GCutProcess |
戻り値 : |
外部プロセスの標準出力の結果をすべて持ったGString。 |
1.1.5から
GString * gcut_process_get_error_string (GCutProcess *process);
|
GCutProcess |
戻り値 : |
外部プロセスの標準エラー出力の結果をすべて持ったGString。 |
1.1.5から
GIOChannel * gcut_process_get_input_channel (GCutProcess *process);
外部プロセスの標準入力と結びついたGIOChannelを取得します。
|
GCutProcess |
戻り値 : |
外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL。 |
1.1.5から
GIOChannel * gcut_process_get_output_channel (GCutProcess *process);
外部プロセスの標準出力と結びついたGIOChannelを取得します。
|
GCutProcess |
戻り値 : |
外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL。 |
1.1.5から
GIOChannel * gcut_process_get_error_channel (GCutProcess *process);
外部プロセスのエラー出力に結びついたGIOChannelを返します。
|
GCutProcess |
戻り値 : |
外部プロセスが実行中の場合はGIOChannel。そうでない場合はNULL。 |
1.1.5から
GInputStream * gcut_process_get_output_stream (GCutProcess *process);
外部プロセスの標準出力と結びついたGInputStreamを取得します。
|
GCutProcess |
戻り値 : |
外部プロセスが実行中の場合はGInputStream。そうでない場合はNULL。 |
1.1.5から
GInputStream * gcut_process_get_error_stream (GCutProcess *process);
外部プロセスの標準エラー出力に結びついたGInputStreamを返します。
|
GCutProcess |
戻り値 : |
外部プロセスが実行中の場合はGInputStream。そうでない場合はNULL。 |
1.1.5から
guint gcut_process_get_forced_termination_wait_time
(GCutProcess *process);
オブジェクトが破棄されるときに行われる外部コマンド強制終了後に待つ時間(ミリ秒)を取得します。
|
GCutProcess |
戻り値 : |
破棄時の強制終了待ちの時間。 |
1.1.5から
void gcut_process_set_forced_termination_wait_time (GCutProcess *process,guint timeout);
オブジェクトが破棄されるときに行われる外部コマンド強制終了時に待つ時間(ミリ秒)を設定します。timeoutが0なら外部コマンドの終了を待ちません。デフォルト値は10です。
|
GCutProcess |
|
タイムアウト時間(ミリ秒) |
1.1.5から
GCutEventLoop * gcut_process_get_event_loop (GCutProcess *process);
processが使っているイベントループを取得します。
|
GCutProcess |
戻り値 : |
GCutEventLoop。 |
1.1.6から
void gcut_process_set_event_loop (GCutProcess *process,GCutEventLoop *loop);
processのイベントループを設定します。loopがNULLなら、デフォルトのGLibイベントループが使われます。
|
GCutProcess |
|
イベントループまたはNULL。 |
1.1.6から
"error"シグナルvoid user_function (GCutProcess *process, gpointer error, gpointer user_data) : Run Last
外部プロセス関連のエラーが発生した毎に発行されます。(例: 入出力エラー)
|
シグナルを受け取るオブジェクト。 |
|
外部プロセスのエラー。(GError) |
|
シグナルハンドラが接続された時にユーザが指定したデータ。 |
1.1.5から
"error-received"シグナルvoid user_function (GCutProcess *process, gchar *chunk, guint64 size, gpointer user_data) : Run Last
外部プロセスが標準エラー出力に出力したデータが読み込まれる毎に発行されます。
外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()やg_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。
|
シグナルを受け取るオブジェクト。 |
|
外部プロセスの標準エラー出力から読み込んだデータ。 |
|
chunkのサイズ。(gsize) |
|
シグナルハンドラが接続された時にユーザが指定したデータ。 |
1.1.5から
"output-received"シグナルvoid user_function (GCutProcess *process, gchar *chunk, guint64 size, gpointer user_data) : Run Last
外部プロセスが標準出力に出力したデータが読み込まれる毎に発行されます。
外部コマンドの出力が読み取り可能になったかどうかを検出するために、g_main_loop_run()やg_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。
|
シグナルを受け取るオブジェクト。 |
|
外部プロセスの標準出力から読み込んだデータ。 |
|
chunkのサイズ。(gsize) |
|
シグナルハンドラが接続された時にユーザが指定したデータ。 |
1.1.5から
"reaped"シグナルvoid user_function (GCutProcess *process, gint status, gpointer user_data) : Run Last
外部プロセスが終了した時に発行されます。
外部コマンドが終了したこと検出するために、g_main_loop_run()やg_main_context_iteration()などでGLibのメインループをまわす必要があることに注意してください。
|
シグナルを受け取るオブジェクト。 |
|
外部プロセスの終了ステータス。 |
|
シグナルハンドラが接続された時にユーザが指定したデータ。 |
1.1.5から