glib命令列解析庫簡單使用

來源:互聯網
上載者:User

官網文檔為:

http://library.gnome.org/devel/glib/stable/glib-Commandline-option-parser.html


 

簡單來說,就是定義GOptionEntry結構,這個結構裡麵包含了命令項名字、類型以及簡單介紹

然後建立GOptionContext,把定義的GOptionEntry結構放到GOptionContext中,調用g_option_context_parse就可以將命令選項都解出來


預設情況下,-h和--help可以查看程式的協助,這個協助資訊是使用的GOptionEntry中定義的資訊,還有一些輔助函數用來添加一些其它資訊,或對這些資訊的格式進行設定。

 


下面是一個簡單的樣本:


static gint repeats = 2;<br />static gint max_size = 8;<br />static gboolean verbose = FALSE;<br />static gboolean beep = FALSE;<br />static gboolean rand = FALSE;<br />static gchar *string;<br />static GOptionEntry entries[] =<br />{<br /> { "repeats", 'r', 0, G_OPTION_ARG_INT, &repeats, "Average over N repetitions", "N" },<br /> { "max-size", 'm', 0, G_OPTION_ARG_INT, &max_size, "Test up to 2^M items", "M" },<br /> { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Be verbose", NULL },<br /> { "beep", 'b', 0, G_OPTION_ARG_NONE, &beep, "Beep when done", NULL },<br /> { "rand", 0, 0, G_OPTION_ARG_NONE, &rand, "Randomize the data", NULL },<br /> { "str_test", 's', 0, G_OPTION_ARG_STRING, &string, "test the stirng", NULL},<br /> { NULL }<br />};<br />int<br />main (int argc, char *argv[])<br />{<br /> GError *error = NULL;<br /> GOptionContext *context;<br /> context = g_option_context_new ("- test tree model performance");<br /> g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);<br /> // g_option_context_add_group (context, gtk_get_option_group (TRUE));<br /> if (!g_option_context_parse (context, &argc, &argv, &error))<br /> {<br /> g_print ("option parsing failed: %s/n", error->message);<br /> exit (1);<br /> }<br /> /* ... */<br />} 

 

GOptionEntry的結構定義為:

typedef struct {<br /> const gchar *long_name; // 完整命令 如:--name<br /> gchar short_name; // 簡寫命令 如:-n<br /> gint flags; // GOptionFlags枚舉的值<br /> GOptionArg arg; // GOptionArg枚舉的值<br /> gpointer arg_data; // 解析出來的資料,所要儲存的位置</p><p> const gchar *description; // 參數描述,--help可以查看到<br /> const gchar *arg_description;<br />} GOptionEntry; 

 

 

編譯之後,可以這樣執行程式

./a.out -r 10 -b -s test

-b後面不能跟參數,因為這個參數類型為:G_OPTION_ARG_NONE。儲存它的變數是一個bool型的值,當有這個參數的值,這個bool值是TRUE,否則是FALSE。

這樣當執行完g_option_context_parse函數之後,就會發現repeats、beep、string裡面都有值了。這兒要注意的是,string這個參數,在使用完了,需要自己來釋放,否則的話就會有記憶體泄露。

 

下面這個網址裡面是一些不錯的範例程式碼,比較詳細的說明了這塊的用法

https://dev.mobileread.com/svn/iliados/upstream/glib-2.6.6/tests/option-test.c

 

原來在glib的原始碼裡面就有詳細用法

glib-2.26.0/glib/tests/option-context.c

 

https://dev.mobileread.com/svn/iliados/upstream/glib-2.6.6/tests/ 這個下面的一些glib的用法,是2.6.6版本的glib源碼附帶的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.