glib での読み書きは g_open ではなく GIOChannel で行うらしい。
もう情報が山ほどありすぎてワケワカだよ、独学の限界を感じる。
まだよく解っていないけどとりあえずテキストで試してみた。
#include <glib.h>
int
main(int argc, char* argv[]) {
GIOChannel* channel;
GError* error = NULL;
gchar* str;
gsize length;
#if !GLIB_CHECK_VERSION (2,35,0)
g_type_init ();
#endif
channel = g_io_channel_new_file("watch.txt", "r", &error);
if (error)
{
g_warning (error->message);
g_error_free (error);
return 1;
}
g_io_channel_read_to_end(channel, &str, &length, &error);
if (error)
{
g_warning (error->message);
g_error_free (error);
g_io_channel_unref(channel);
return 1;
}
g_printf(str);
g_free(str);
g_io_channel_unref(channel);
return 0;
}
こういうことでいいのかな?
char 配列ならバイト単位だからバイナリにも応用できるな。
んで、いつものように vala のサンプルコードを見てみる。
GLib.IOChannel ? glib-2.0
g_io_add_watch でハンドラを用意してメインループを回している。
このコードだとこうするメリットが特に見当たらないんですけど。
GMainLoop, GMainContext和GSource学?笔? – ?匠Smith先生的?? – 博客?道 – CSDN.NET
こんなこともできるのか、端末からの読み書きに GMainLoop とは。
つまりメインループを回すことに意義があるってことかな。
ただバックスラッシュ(\)がスラッシュ{/}になっているのは何故?
そこを書き換えて g_type_init を消せば普通にビルドできます。
このコードを参考に色々弄ってみると面白いかも。
中国にも glib を使っている人がいるんだな、つか日本人は…








