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コードの初期設定の話になってしまった。