GIO入門
というか、glibほとんど調べてないので、何ができるのかテストしてみようと思った。そこで、流行のGObjectとGIOを調べたのですが、GObjectはライブラリを使う分には深く知る必要はなさそうなので、GIOから調べてます。
GIOの最初はGFileということで、簡単なコードを書いてみた。g_file_new_for_path ()を使うだけのコードです。
#include <gio/gio.h> gint main (gint argc, gchar* argv[]) { GFile *gf; gf = g_file_new_for_path ("sample.txt"); return 0; }
そして、ビルド & 実行。
$ gcc gfile.c $(pkg-config --cflags --libs gio-2.0) $ ./a.out (process:21474): GLib-GObject-CRITICAL **: gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function (process:21474): GLib-GObject-CRITICAL **: g_type_interface_add_prerequisite: assertion `G_TYPE_IS_INTERFACE (interface_type)' failed .....
まあ、エラーが出て止まるわけです。
この手のエラーは、gtk_init ()すると出ないのですが、glibというかGIOしか使わないのに、gtk_init ()する必要はなさそう。調べた結果、g_type_init ()すれば良いらしい。
#include <gio/gio.h> gint main (gint argc, gchar* argv[]) { GFile *gf; g_type_init (); gf = g_file_new_for_path ("sample.txt"); return 0; }
これだと何事もなく動作します。これで、GFileオブジェクトができるので、後はリファレンスを読みながら、読み書きを実行すればOKみたいです。
この g_type_init ()って関数でシステム調査を行い、それ以降のglib関係の型やシグナルをうまく扱ってくれるらしい。
ということで、GIO入門というか、glibコードの初期設定の話になってしまった。