GIOでWebを読み込む

GIO って GVfs もサポートしているから、当然 Web 上のファイルも読み込めるはずと期待してプログラムを書いてみたら簡単に読み込めた。
ソースは以下の通りですが、最初の #define URL は適宜書き換えてください。

#include <glib/gprintf.h>
#include <gio/gio.h>

#define BUF_SIZE 10000
#define URL "http://www.momonga-linux.org/"

int
main (int argc, char *argv)
{
	GVfs *vfs;
	GFile *g_file;
	GFileInputStream *g_file_input_stream;
	gchar buffer[BUF_SIZE];
	gsize bytes_read;

	g_type_init ();
	vfs = g_vfs_get_default ();
	g_file = g_vfs_get_file_for_uri (vfs, URL);
	g_file_input_stream = g_file_read (g_file, NULL, NULL);

	if (g_file_read != NULL)
	{
		if (g_input_stream_read_all ((GInputStream*) g_file_input_stream,
						buffer,
						BUF_SIZE,
						&bytes_read,
						NULL,
						NULL))
		{
			g_printf ("%s\nread %d byte\n", buffer, bytes_read);
		}
		g_object_unref (g_file_input_stream);
	}
	else
	{
		g_printf ("Can't read from URL\n");
	}
	return 0;
}

ビルドは以下のとおり

$ gcc -g -O2 main.c $(pkg-config --cflags --libs gio-2.0)

そして実行

$ ./a.out
<?xml version="1.0" encoding="ISO-8859-1"?>
...
</html>

read 6949 byte

きちんと読み込める。C言語でネットワーク透過というのは面白いな。書き込みは難しいと思いますが。