シリアル回線のファイル記述子である新しいソースをg_main_loopに追加しようとしました。シリアルリンクで読み込みを待っているデータの通知
私はこのコードを試してみてください。
GError* error;
GIOChannel* channel;
channel=g_io_channel_unix_new(fd_serial_line_dev);
g_io_add_watch(channel, G_IO_IN, cb_1, NULL);
g_io_channel_set_close_on_unref(channel, TRUE);
g_io_channel_set_encoding(channel, NULL, &error);
g_io_channel_set_buffered(channel, FALSE);
コールバックは次のとおりです。
gboolean cb_1 (GIOChannel *source, GIOCondition condition, gpointer data)
{
gchar** line=NULL;
GIOStatus status;
GError* error;
printf("cb\n");
status=g_io_channel_read_line(source, line, NULL, NULL, &error);
if(G_IO_STATUS_NORMAL == status)
{
printf("callback : data : %s\n", *line);
g_free(*line);
//g_io_channel_seek_position(source, 0, G_SEEK_CUR, NULL);
}
return TRUE;
}
私はシリアル回線上のデータを送信するとき、私はcb_1たびに呼び出す無限ループを得ます。
私は私のミスであり、私はシリアルラインのファイルディスクリプタ内の読み取りは、次のグラムメインループの反復中にコールバックに呼び出しを停止するsuffisantされることが予想表示されない...
私はチャンネルを閉じるためにエラーでfalseを返しているはずです。 – TheAschr
私は試して、このソリューションのコールバックは、たとえ新しいcaracterが来ているとしても呼び出されることはありません。私にとって、FALSEを返すことは、イベントソースを削除する必要がある場合に便利です –