glibc和libc都是Linux下的C函數庫,
libc是Linux下的ANSI C的函數庫;
glibc是Linux下的GUN C的函數庫;
1.ANSI C: 美國國家標準學會(American National Standards Institute)
C是基本的C語言函數庫,包含了C語言最基本的庫函數。
//脫離glibc的demo.c
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
# gcc demo.c
2.Glib C:GNU自由軟件組織
而GNUC函數庫是一種類似於第三方插件的東西,由於Linux是用C語言寫的,所以Linux的一些操作是用C語言實
現的,所以GUN組織開發了一個C語言的庫用於我們更好的利用C語言開發基於Linux操作系統的程序。其實我們可
以把它理解爲類似於Qt是一個C++的第三方函數庫一樣。不過現在的不同的Linux的發行版本對這兩個函數庫有不
同的處理方法,有的可能已經集成在同一個庫裏了,例如Ubuntu就只有glibc。
C語言自身並沒有提供IO,內存管理,字符串操作等類似的機制。作爲彌補,C語言有一個標準庫幫助C語言實現
這些機制。我們在編譯C程序的時候基本上都需要鏈接到這些庫文件。
GNU C Library定義ISO C標準還有其他一些標準(POSIX)規定的函數庫。
//glibc demo.c
static gint repeats = 2;
static gint max_size = 8;
static gboolean verbose = FALSE;
static gboolean beep = FALSE;
static gboolean rand = FALSE;
static gchar *string;
static GOptionEntry entries[] =
{
{ "repeats", 'r', 0, G_OPTION_ARG_INT, &repeats, "Average over N repetitions", "N" },
{ "max-size", 'm', 0, G_OPTION_ARG_INT, &max_size, "Test up to 2^M items", "M" },
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Be verbose", NULL },
{ "beep", 'b', 0, G_OPTION_ARG_NONE, &beep, "Beep when done", NULL },
{ "rand", 0, 0, G_OPTION_ARG_NONE, &rand, "Randomize the data", NULL },
{ "str_test", 's', 0, G_OPTION_ARG_STRING, &string, "test the stirng", NULL},
{ NULL }
};
int main (int argc, char *argv[])
{
GError *error = NULL;
GOptionContext *context;
context = g_option_context_new ("- test tree model performance");
g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
// g_option_context_add_group (context, gtk_get_option_group (TRUE));
if (!g_option_context_parse (context, &argc, &argv, &error))
{
g_print ("option parsing failed: %s/n", error->message);
exit (1);
}
/* ... */
}
//GOptionEntry的結構定義爲:
typedef struct {
const gchar *long_name; // 完整命令 如:--name
gchar short_name; // 簡寫命令 如:-n
gint flags; // GOptionFlags枚舉的值
GOptionArg arg; // GOptionArg枚舉的值
gpointer arg_data; // 解析出來的數據,所要存儲的位置
const gchar *description; // 參數描述,--help可以查看到
const gchar *arg_description;
} GOptionEntry;
//編譯
# gcc test.c -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
-L/usr/lib/x86_64-linux-gnu -lglib-2.0 -o test
# ./test -r 10 -b -s test
注意:
-b後面不能跟參數,因爲這個參數類型爲:G_OPTION_ARG_NONE。存儲它的變量是一個bool型的值,當有這個
參數的值,這個bool值是TRUE,否則是FALSE。