Tag: glib

一个线程中的GLib GMainContext?

我搜索了堆栈溢出来找到与我的问题相关的答案。 但我没有找到任何答案。 我有一个主线程(我的main()函数),它启动一个线程。 新线程运行GMainLoop。 在我的主要function中,我通过在某些文件描述符上调用g_io_watch来继续添加源代码。 但是,如果发送了事件,我会收到垃圾数据。 以下是我正在尝试的代码的一小部分: GMainLoop *loop; gpointer event_loop_thread(gpointer arg) { g_main_loop_run(loop); g_main_loop_unref(loop); return NULL; } int init() { loop = g_main_loop_new(NULL, FALSE); g_thread_new(NULL, event_loop_thread, NULL); return 0; } gboolean __hci_service(GIOChannel *source, GIOCondition condition, gpointer data) { // Doing something return FALSE; } int main() { init(); int _adapter_id = hci_devid(“hci0”); int hci_dev […]

g_slice_alloc中的段错误

我正在使用以下行调用函数: void call_system_command(const char *command_params) { GString *cmd = g_string_sized_new(1024); g_string_append_printf(cmd, “/bin/bash /path/to/my/script ‘%s'”, command_params); system(cmd->str); g_string_free(cmd, TRUE); } 我正在使用g_string_sized_new获得段错误。 来自gdb的Backtrace显示: (gdb) bt #0 0x000000320ce56264 in g_slice_alloc () from /lib64/libglib-2.0.so.0 #1 0x000000320ce5c3db in g_string_sized_new () from /lib64/libglib-2.0.so.0 …. 我已经尝试导出G_SLICE = always-malloc,因此不使用glib自己的分配器,而是使用malloc。 但问题仍然存在。 我仍然在g_slice_alloc中遇到段错误。 我也从多个线程调用此函数’call_system_command’。 这可能是个问题吗? 该函数是插件的一部分,每15分钟由cron调用。 每次执行插件时都不会发生段错误,但每3-4天就会发生一次。 有关进一步调试的任何指示都会有所帮助。 提前致谢。

不能在Mac OSX上使用gtk3 FileChooser?

我将使用gtk + 3.0构建的程序从linux迁移到Mac OS X(10.6.8)。 我编译程序没有错误。 但是,在我启动程序并选择打开文件后,终端显示以下消息。 GLib-GIO-CRITICAL **: Settings schema ‘org.gtk.Settings.FileChooser’ is not installed 然后,程序以Segmentation fault结束。 怎么解决? 谢谢你的帮助。

在glib的“g_print()”中强制UTF-8编码

简短的问题:有没有办法强制glib的g_print()使用UTF-8编码? 我遇到的问题是g_print() 似乎根据g_get_charset()的返回值进行字符集转换 。 不幸的是,文档提到了 在Windows上,此函数返回的字符集是所谓的系统默认ANSI代码页。 但是现在可以使用现代控制台:默认情况下,MSYS控制台通常支持(和使用)UTF-8,甚至可以将默认的Windows控制台设置为使用UTF-8编码。 现在看来Windows终于赶上了,glib将我限制在一个255个字符的代码页之后??? 我只是将我的代码切换到普通的printf但不幸的是g_print在glib和gtk库中的许多位置调用,以及他们的C ++绑定glibmm和gtkmm,我显然没有简单的可能性来改变那些缺少修补和自己编译glib,所以我真的希望有一个解决方案。 注意:刚刚在g_print()的定义中看到了调用local_glib_print_func()的部分。 Aynbody知道这是什么,如果我可以为我的目的利用它?

想要使用g_timeout_add。 必须运行glib主循环?

我正在尝试使用g_timeout_add(timevalue,Func,在Func中传递的值)添加回调以获取某些状态或在timevalue之后打印一些内容。 我无法看到它。 我还要调用主循环吗? 或任何其他类型的function,以使其工作?

GLib哈希表循环问题

我将在C程序中使用GLib的Hash表实现,现在我只是在尝试它。 我编写了以下代码用于测试: #include #include #include #include #include int main(){ // Some codes and declerations here GHashTable *g_hash_table; uint32_t *a; a=(uint32_t *)malloc(sizeof(uint32_t)); if(a==NULL){ printf(“Not Enough Mem For a\n”); return 1; } *a=1123231; uint32_t* key; key=(uint32_t *)malloc(sizeof(uint32_t)); if(key==NULL){ printf(“Not Enough Mem For key\n”); return 1; } *key=122312312; int i; g_hash_table=g_hash_table_new(g_int_hash, g_int_equal); for(i=0;i<TABLE_SIZE;i++){ *key+=1; *a+=1; g_hash_table_insert(g_hash_table,(gpointer)key,(gpointer)a); uint32_t *x=(uint32_t […]

从Web获取文件:在GTK中使用C

我应该使用什么函数使用gtk libs从Web获取文件? 如果我的文件来自: gchar * path =“http://xxx.yyyServer/sharing/temp.txt” 我该怎么做才能下载它? 对于本地文件,我只使用像fopen和fread这样的C库。 我该怎么办? 遗憾的是,教程中没有文件处理的例子。 我只能从文件对话框中看到文件选择器。 请帮助这个菜鸟。 谢谢 使用注释中的工作代码更新:以下代码适用于未知大小的二进制文件。 char *name= http://127.0.0.1:8000/mybinfile int getFile(char *name) { GFile *f = g_file_new_for_uri(name); GFileInputStream *fis = NULL; GDataInputStream* dis = NULL; GError *err = NULL; //char buffer[2048]; char *buffer; size_t length; int ret = -1; GFileInfo *info; int total_size = -1; /* […]

glib是否能以一种不引人注目的方式使用?

我正在为标准C库之上的C寻找一个好的通用库,并且已经看到了一些使用glib的建议。 你的代码中有多么“突兀”? 为了解释我所说的突兀是什么意思,我在参考手册中注意到的第一件事是基本类型部分 ,对自己思考,“我将开始使用gint , gchar和gprefixing geverything gin gmy gcode gnow?” 更一般地说,您是否可以仅在本地使用它而不需要在代码中使用其他function或文件来了解其用途? 它是否强制对代码进行某些假设,或者对编译/链接过程施加约束? 它是否在运行时为全局数据结构占用了大量内存? 等等

可执行启动目录的绝对路径

我试图弄清楚如何获取我的程序的开始目录。 我正在使用C并可以访问GLib。 在Linux方面,只要程序启动就很容易g_get_current_directory,并存储该值以供以后使用。 我尝试在Windows上使用相同的方法,但g_get_current_directory返回%APPDATA%解析的内容。 关于如何使用C获取起始目录的任何想法? 谢谢,

使用gnome多媒体键无法让dbus信号监听器在C中工作

我正在尝试创建自己的应用程序,它将使用dbus监听gnome中的媒体键。 我找到了一个在python中运行的脚本,我试图通过将其转换为C来使其工作。我的c代码构建并正确运行但它不响应dbus信号。 这个python代码有效: #!/usr/bin/env python “””Printing out gnome multi media keys via dbus-python. “”” import gobject import dbus import dbus.service import dbus.mainloop.glib def on_mediakey(comes_from, what): “”” gets called when multimedia keys are pressed down. “”” print (‘comes from:%s what:%s’) % (comes_from, what) if what in [‘Stop’,’Play’,’Next’,’Previous’]: print (‘Got a multimedia key!’) else: print (‘Got a […]