Linux 版 (精华区)

发信人: netiscpu (平淡是真), 信区: Linux
标  题: GTK入门导引(17)
发信站: 紫 丁 香 (Mon Dec 14 14:48:00 1998), 转信


发信人: hey (吟风·悠游98), 信区: Unix
标  题: GTK入门导引(17)
发信站: 华南网木棉站 (Tue Nov 10 11:21:24 1998), 转信

17. glib

glib提供许多有用的函数及定义. 我把它们列在这里并做简短的解释. 很多都是
与libc重复, 对这些我不再详述. 这些大致上是用来参考, 您知道有什么东西可
以用就好. 

17.1 定义 

为保持资料型态的一致, 这里有一些定义: 

    G_MINFLOAT
    G_MAXFLOAT
    G_MINDOUBLE
    G_MAXDOUBLE
    G_MINSHORT
    G_MAXSHORT
    G_MININT
    G_MAXINT
    G_MINLONG
    G_MAXLONG

此外, 以下的typedefs. 没有列出来的是会变的, 要看是在那一种平台上. 如果您
想要具有可移植性, 记得避免去使用sizeof(pointer). 例如, 一个指标在Alpha上
是8 bytes, 但在Inter上为4 bytes. 

    char   gchar;
    short  gshort;
    long   glong;
    int    gint;
    char   gboolean;

    unsigned char   guchar;
    unsigned short  gushort;
    unsigned long   gulong;
    unsigned int    guint;

    float   gfloat;
    double  gdouble;
    long double gldouble;

    void* gpointer;

    gint8
    guint8
    gint16
    guint16
    gint32
    guint32

17.2 双向链结串列 

以下函数用来产生, 管理及销毁双向链结串列. 

    GList* g_list_alloc       (void);

    void   g_list_free        (GList     *list);

    void   g_list_free_1      (GList     *list);

    GList* g_list_append      (GList     *list,
                               gpointer   data);
                               
    GList* g_list_prepend     (GList     *list,
                               gpointer   data);
                            
    GList* g_list_insert      (GList     *list,
                               gpointer   data,
                               gint       position);

    GList* g_list_remove      (GList     *list,
                               gpointer   data);
                               
    GList* g_list_remove_link (GList     *list,
                               GList     *link);

    GList* g_list_reverse     (GList     *list);

    GList* g_list_nth         (GList     *list,
                               gint       n);
                               
    GList* g_list_find        (GList     *list,
                               gpointer   data);

    GList* g_list_last        (GList     *list);

    GList* g_list_first       (GList     *list);

    gint   g_list_length      (GList     *list);

    void   g_list_foreach     (GList     *list,
                               GFunc      func,
                               gpointer   user_data);

17.3 单向链结串列 

以下函数是用来管理单向链结串列: 

    GSList* g_slist_alloc       (void);

    void    g_slist_free        (GSList   *list);

    void    g_slist_free_1      (GSList   *list);

    GSList* g_slist_append      (GSList   *list,
                                 gpointer  data);
                    
    GSList* g_slist_prepend     (GSList   *list,
                                 gpointer  data);
                                 
    GSList* g_slist_insert      (GSList   *list,
                                 gpointer  data,
                                 gint      position);
                                 
    GSList* g_slist_remove      (GSList   *list,
                                 gpointer  data);
                                 
    GSList* g_slist_remove_link (GSList   *list,
                                 GSList   *link);
                                 
    GSList* g_slist_reverse     (GSList   *list);

    GSList* g_slist_nth         (GSList   *list,
                                 gint      n);
                                 
    GSList* g_slist_find        (GSList   *list,
                                 gpointer  data);
                                 
    GSList* g_slist_last        (GSList   *list);

    gint    g_slist_length      (GSList   *list);

    void    g_slist_foreach     (GSList   *list,
                                 GFunc     func,
                                 gpointer  user_data);
            

17.4 记忆体管理 

    gpointer g_malloc      (gulong    size);

这是替代malloc()用的. 你不需要去检查返回值, 因为它已经帮你做好了, 保证. 

    gpointer g_malloc0     (gulong    size);

一样, 不过会在返回之前将记忆体归零. 

    gpointer g_realloc     (gpointer  mem,
                            gulong    size);

重定记忆体大小. 

    void     g_free        (gpointer  mem);

    void     g_mem_profile (void);

将记忆体的使用状况写到一个档案, 不过您必须要在glib/gmem.c里面,
 加#define MEM_PROFILE, 然后重新编译. 

    void     g_mem_check   (gpointer  mem);

检查记忆体位置是否有效. 您必须要在glib/gmem.c上加#define
MEM_CHECK, 然后重新编译. 

17.5 Timers 

Timer函数.. 

    GTimer* g_timer_new     (void);

    void    g_timer_destroy (GTimer  *timer);

    void    g_timer_start   (GTimer  *timer);

    void    g_timer_stop    (GTimer  *timer);

    void    g_timer_reset   (GTimer  *timer);

    gdouble g_timer_elapsed (GTimer  *timer,
                             gulong  *microseconds);

17.6 字串处理 

    GString* g_string_new       (gchar   *init);
    void     g_string_free      (GString *string,
                                 gint     free_segment);
                                 
    GString* g_string_assign    (GString *lval,
                                 gchar   *rval);
                                 
    GString* g_string_truncate  (GString *string,
                                 gint     len);
                                 
    GString* g_string_append    (GString *string,
                                 gchar   *val);
                                
    GString* g_string_append_c  (GString *string,
                                 gchar    c);
            
    GString* g_string_prepend   (GString *string,
                                 gchar   *val);
                                 
    GString* g_string_prepend_c (GString *string,
                                 gchar    c);
            
    void     g_string_sprintf   (GString *string,
                                 gchar   *fmt,
                                 ...);
            
    void     g_string_sprintfa  (GString *string,
                                 gchar   *fmt,
                                 ...);

17.7 工具及除错函数 

    gchar* g_strdup    (const gchar *str);

    gchar* g_strerror  (gint errnum);

我建议您使用这个来做所有错误讯息. 这玩意好多了. 它比perror()来的具有可
移植性. 输出为以下形式: 

    program name:function that failed:file or further description:strerror

这里是"hello world"用到的一些函数: 

    g_print("hello_world:open:%s:%s\n", filename, g_strerror(errno));

    void g_error   (gchar *format, ...);

显示错误讯息, 其格式与printf一样, 但会加个"** ERROR **: ", 然后离开程式.
只在严重错误时使用. 

    void g_warning (gchar *format, ...);

跟上面一样, 但加个"** WARNING **: ", 不离开程式. 

    void g_message (gchar *format, ...);

加个"message: ". 

    void g_print   (gchar *format, ...);

printf()的替代品. 

最后一个: 

    gchar* g_strsignal (gint signum);

列印Unix系统的信号名称, 在信号处理时很有用. 

这些大都从glib.h中而来. 

--
        6m3m┌───────────────────────┐0m
        6m3m│     4m疾如风,徐如林,侵掠如火,不动如山       3m│4m 0m
        6m3m└───────────────────────┘0m4m 0m
          4m                                                 0m

m;32m※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.212.66]m
--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:207.767毫秒