시리얼 라인 주변 장치의 파일 설명자인 새 소스를 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;
}
I 직렬 회선에 데이터를 송신
, 난 cb_1마다 호출 무한 루프를 얻었다.내 실수 어디가 표시되지 않습니다, 나는 시리얼 라인의 파일 기술자 내에서 읽기가 ... 다음 g 주요 루프 반복 동안 콜백에 전화를 중지
채널을 닫으려면 오류가 발생하면 false를 반환해야합니다. – TheAschr
나는 새로운 Caracter가 들어오고 있어도이 솔루션 콜백을 호출하지 않을 것이다. 나를 위해, FALSE를 반환하면 이벤트 소스를 제거해야하는 경우에 유용합니다. –