glib で command を実行
通常、commandを実行するときは、system()を使いますが、これだと実行ログ(標準出力など)が取れません。glibでは g_spawn_command_line_sync () があり、これを使うと標準出力と標準エラー出力が簡単に取得できます。
ということで、単純に wget で lame-3.98.4.tar.gz を sourceforge から取得してみます。
#include <glib.h> int main (int argc, char* argv[]) { gchar *command_line="wget http://jaist.dl.sourceforge.net/sourceforge/lame/lame-3.98.4.tar.gz"; gchar *standard_output, *standard_error; gint exit_status; g_spawn_command_line_sync (command_line, &standard_output, &standard_error, &exit_status, NULL); g_printf ("stdout:\t%s\n", standard_output); g_printf ("stderr:\t%s\n", standard_error); return 0; }
用意するのは command line 引数だけで、それ以外はポインタを渡します。GError はいつものように NULL にします。そして、ビルドと実行。
$ gcc main.c $(pkg-config --cflags --libs glib-2.0)
$ ./a.out stdout: stderr: --2010-11-07 17:25:21-- http://jaist.dl.sourceforge.net/sourceforge/lame/lame-3.98.4.tar.gz jaist.dl.sourceforge.net (jaist.dl.sourceforge.net) をDNSに問いあわせています... 150.65.7.130, 2001:200:141:feed::feed ... 2010-11-07 17:25:27 (241 KB/s) - `lame-3.98.4.tar.gz' へ保存完了 [1336025/1336025]
こんな感じで簡単にプロセスを実行して、標準出力と標準エラー出力を取得することができます。