使用glic事件循环实现监听外部发送的指令的demo
时间: 2024-03-16 18:45:58 浏览: 60
Linux下解决glibc库缺失导致的系统命令不能使用的问题.pdf
以下是一个简单的使用GLib事件循环监听标准输入的示例代码:
```c
#include <stdio.h>
#include <glib.h>
static gboolean stdin_callback(GIOChannel *channel, GIOCondition condition, gpointer user_data)
{
if (condition & G_IO_IN) {
gchar *line = NULL;
gsize length = 0;
if (g_io_channel_read_line(channel, &line, &length, NULL, NULL) == G_IO_STATUS_NORMAL) {
g_print("Read from stdin: %s", line);
g_free(line);
}
return TRUE;
}
return FALSE;
}
int main(int argc, char *argv[])
{
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
GIOChannel *stdin_channel = g_io_channel_unix_new(fileno(stdin));
guint stdin_id = g_io_add_watch(stdin_channel, G_IO_IN, (GIOFunc)stdin_callback, NULL);
g_io_channel_unref(stdin_channel);
g_main_loop_run(loop);
g_source_remove(stdin_id);
g_main_loop_unref(loop);
return 0;
}
```
这个示例代码中,我们使用`g_io_channel_unix_new()`函数创建了一个标准输入的GIOChannel对象,并把它注册到事件循环中。当标准输入有数据可读时,会调用`stdin_callback()`函数处理这个事件。
`stdin_callback()`函数中,我们调用`g_io_channel_read_line()`函数从标准输入中读取一行数据,并打印出来。最后,函数返回TRUE表示事件已经处理完毕。
在`main()`函数中,我们创建了一个GMainLoop对象,并使用`g_main_loop_run()`函数启动事件循环。当事件循环结束时,我们使用`g_source_remove()`函数从事件循环中删除标准输入的事件源,并释放相关的资源。
注意:在实际使用中,应该根据自己的需要来选择不同的事件源类型,并在回调函数中实现对外部指令的处理。
阅读全文